关于Spring修饰Bean对象的注解笔记

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

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

  • @Configuration(描述Bean为一个配置对象)spring-configs.xml

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

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

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

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

以上注解对Spring框架而言, 它描述的类都是一个Bean对象,相当于xml文件中的 标签的作用 ,Spring对其处理的方式都是一样的,只是表面上代表的含义不同而已.


2.定义Bean对象作用域的注解。

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

3.定义bean对象的加载策略(按需加载)

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

4.指定自定义Bean对象生命周期方法 (xml中使用 )

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

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

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


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

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

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

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


6.Spring Bean 注解应用

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


7.Bean对象声明注解应用

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

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

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

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

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

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

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


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

Spring 管理的Bean一般都会指定一个作用域,借助注解定义作用域时需要
使用@Scope,注解中常用值singleton或者prototype

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

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


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

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

@Scope//默认是singleton
@Component
public class OpenDataSource {
    /**使用此注解修饰的方法为对象生命周期初始化方法*/
    @PostConstruct
    public void init(){
        System.out.println("初始化池对象");
    }
    /**使用此注解修饰的方法为对象生命周期销毁方法*/
    @PreDestroy
    public void destory(){
        System.out.println("销毁池对象");
    }
}

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

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

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

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

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

猜你喜欢

转载自www.cnblogs.com/xianyao/p/10847007.html
今日推荐