spring总结(02)注解

1. Spring IOC 注解基本应用

1.1. Spring Bean 注解描述

Spring容器中描述bean的方式有两种,一种是基于xml方式,一种是基于注解方式.,现阶段基于注解方式描述Bean元素已经成为一种趋势.Spring中常用的bean注解有如下几种:

1) 修饰Bean对象的注解。(xml中描述bean使用<bean>)

a) @Configuration(描述Bean为一个配置对象)

b) @Component(描述Bean为一个一般组件组件)

c) @Controller(描述Bean为一个控制层对象)

d) @Service (描述Bean为一个业务层对象)

e) @Respository(描述Bean为一个持久层对象)

f) @Scope(描述bean的作用域)

g) @Lazy(定义bean对象是否延迟加载)

h) ….

1) 指定Bean生命周期方法 (xml中使用<bean init-method=””>)

a) @ PostConstruct(描述生命周期开始要调用的初始化的方法)

b) @ PreDestroy (描述生命周期结束时要调用的销毁的方法)

说明:描述生命周期方法的注解应用时应在JDK1.7以上版本

2) 自动装配注解(为属性注入值):类似xml阶段中bean标签的autowire属性

a) @Autowire (一般修饰构造方法或set方法或属性,默认按类型装配)

b) @Qualifier (配合Autowire注解,按名字进行装配,尤其是出类型相同的bean时,可以指定具体bean)

c) @Resource (一般修饰set方法或属性,默认按名字装配)

1.1. Spring Bean 注解应用

在spring应用中假如使用注解描述bean,定义bean的依赖机制,首先需要配置

类的扫描机制(扫描某个或多个包中的类),spring扫描到这个类以后,会检测类上是否有spring中定义的相关注解的描述(例如@Controller,@Service),假如有spring底层会通过反射构建此类型的对象,然后进行管理.

1.1.1. Bean对象声明注解应用

项目应用中我们自己定义的类假如需要由Spring IOC管理,可以通过相关注解进行描述,例如:

a) @Configuration(用于描述配置类)

b) @Component (描述通用性组件)

c) @Controller (描述MVC中控制层组件)

d) @Service (描述MVC 中业务层组件)

e) @Repository(描述MVC中持久层组件)

说明:这些组件实现的功能是一样的,只是应用的业务场景不同

说明:使用Spring注解修饰的类,默认bean的名字为类名并且首字母小写.当然也可以为Bean对象指定名字,例如@Service(“sysConfig”)

1.1.1. Bean对象作用域注解应用

Spring 管理的Bean一般都会指定一个作用域,借助注解定义作用域时需要

使用@Scope,注解中常用值为singleton或者prototype,当然还有其它的作用域,只是用的比较少而已。

@Scope("singleton")

@Component

public class OpenDataSource{

}

其中:

1) singeton 表示单例作用域,每次获取的对象都是一样的。

2) prototype 表示多例作用域,每次获取的对象都是不同的。

1.1.1. Bean对象生命周期方法注解应用

Spring 管理的Bean对象都有生命周期,但不一定都有生命周期方法,假如有些Bean需要指定生命周期方法,基于注解实现时可以借助@PostConstruct和@ PreDestroy,这个两个注解都属于JDK中的API,使用时需要注意版本问题

 

@Scope//默认是singleton

@Component

public class OpenDataSource {

/**使用此注解修饰的方法为对象生命周期初始化方法*/

@PostConstruct

public void init(){

System.out.println("初始化池对象");

}

/**使用此注解修饰的方法为对象生命周期销毁方法*/

@PreDestroy

public void destory(){

System.out.println("销毁池对象");

}

}

1.1.1. Bean对象自动装配注解应用

Spring 管理的Bean对象可以采用自动装配机制为属性赋值.基于注解方式进行自动装配,一般需要使用@Autowired,@Qualifier,@Resource这些注解.

1) @Autowired 可以修饰属性,构造方法,set方法,默认依据类型(属性类型,参数类型)为属性注入值.假如Spring容器中有多个相同类型的值,会参考名字进行匹配查找(属性名,set方法参数名,构造方法参数名),假如名字有相同的则注入,没有相同的会注入失败.

2) @Qualifier 配合@Autowired注解按名字为属性注入值.

3) @Resource 可以修饰属性或set方法,默认依据名字(属性名,set方法名)为属性注入值.假如spring容器中有名字相同但类型不同的bean就会注入失败,当没有找到对应名字的bean对象,此时会依据类型再次进行查找,假如相同类型则

直接注入,当有多个相同类型可能会注入失败(假如是按set方法进行注入,依据方法名字没找到,还会按参数类型查找,对应类型有多个,还可能会按参数名查找,假如没找对应的,则注入失败).

1.1. @ComponentScan注解应用

@ComponentScan注解通常用于定义在配置类上,用于配置对哪些包中类进行扫描,例如

@ComponentScan("com.jt")

public class AppConfig {

}

当容器初始化可以获取AppConfig类对象,通过反射获取类对象上的@ComponentScan注解,并获取注解中定义的包路径,再从指定路径下获取包下的类

基于注解方式进行容器初始化

AnnotationConfigApplicationContext ctx=

new AnnotationConfigApplicationContext(AppConfig.class);

容器初始化以后就可以从容器获取由Spring管理的Bean对象了。

1.1. @Bean注解应用

@Bean注解一般用于配置类中,用于修饰相关方法,通过这样的方法返回相关对象,然后将这个对象会存储在spring容器中。

原文地址:https://www.cnblogs.com/zj-xu/p/10844978.html

时间: 2024-10-09 12:52:39

spring总结(02)注解的相关文章

Spring AspectJ基于注解的AOP实现

对于AOP这种编程思想,很多框架都进行了实现.Spring就是其中之一,可以完成面向切面编程.然而,AspectJ也实现了AOP的功能,且实现方式更为简捷,使用更加方便,而且还支持注解式开发.所以,Spring又将AspectJ对于AOP的实现也引入到了自己的框架中.     在Spring中使用AOP开发时,一般使用AspectJ的实现方式. Spring的经典AOP配置方案  01.使用的是Aspectj第三方框架,实现了AOP思想  02.注解配置的AOP  03.纯POJO <aop:c

spring mvc 方法注解拦截器

应用场景,在方法级别对本次调用进行鉴权,如api接口中有个用户唯一标示accessToken,对于有accessToken的每次请求可以在方法加一个拦截器,获得本次请求的用户,存放到request或者session域. python中,之前在python flask中可以使用装饰器来对方法进行预处理,进行权限处理 先看一个实例,使用@access_required拦截: @api.route('/post_apply') @access_required def apply():     "&q

Spring MVC常用注解

cp by http://www.cnblogs.com/leskang/p/5445698.html 1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示.在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Control

使用Spring处理自定义注解

使用Spring处理自定义注解 本文只讲思想,不讲代码. 可能的两种方法 spring schema spring aop aspect 参考1 dubbo service 包名:com.alibaba.dubbo.config 参考2 spring mvc 包名:org.springframework.web.servlet.config 可以参考这两个的实现,利用schema添加自定义注解并处理自己的注解,注册搜索模块. 源码分析 通过schema添加配置解析如: 在 spring配置文件中

Spring中@Autowired注解、@Resource注解的区别(转)

标签: Autowired Resource Spring(3)  Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分是name和type,Spring将@Reso

spring AOP + 自定义注解实现权限控制小例子

今天看了一下黑马程序员的视频,上面讲到一个使用spring AOP + 自定义注解的方式来实现权限控制的一个小例子,个人觉得还是可以借鉴,整理出来与大家分享. 需求:service层有一些方法,这些方法需要不同的权限才能访问. 实现方案:自定义一个PrivilegeInfo的注解,使用这个注解为service层中的方法进行权限配置,在aop中根据PrivilegeInfo注解的值,判断用户是否拥有访问目标方法的权限,有则访问目标方法,没有则给出提示. 关键技术:自定义注解及注解解析,spring

Spring 的@Scheduled注解实现定时任务运行和调度

首先要配置我们的spring.xml   ---  即spring的主配置文件(有的项目中叫做applicationContext.xml或context.xml) xmlns 多加以下的内容. [html] view plaincopy xmlns:task="http://www.springframework.org/schema/task" 然后xsi:schemaLocation多加以下的内容. [html] view plaincopy http://www.springf

Spring中@Autowired注解、@Resource注解的区别

Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析

spring mvc3的注解@ResponseBody 自动返回jason

第三种利用spring mvc3的注解@ResponseBody 例如: [java] view plain copy print? @ResponseBody @RequestMapping("/list") public List<String> list(ModelMap modelMap) { String hql = "select c from Clothing c "; Page<Clothing> page = new Pag

Spring AOP基于注解的“零配置”方式

Spring AOP基于注解的“零配置”方式: Spring的beans.xml中 <!-- 指定自动搜索Bean组件.自动搜索切面类 --> <context:component-scan base-package="org.crazyit.app.service,org.crazyit.app.aspect"> <context:include-filter type="annotation" expression="or