Spring IOC高级

Posted 一只特立独行的程序猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring IOC高级相关的知识,希望对你有一定的参考价值。

 

 

更多内容参见个人技术博客,无广告欢迎关注

 

1.Spring IOC 注解基本应用

1.1.Spring Bean 注解描述

1.2.Spring Bean 注解应用

1.2.1.Bean对象声明注解应用

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

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

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

2.Spring IOC 注解应用进阶

2.1.@ComponentScan注解应用

2.2.@Bean注解应用

2.3.@Value@PropertySource注解应用

3.总结

3.1.重点和难点分析

3.2.作业

 

 

1.SpringIOC注解基本应用

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.2.   Spring Bean 注解应用

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

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

 

 

 

1.2.1.  Bean对象声明注解应用

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

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

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

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

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

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

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

 

应用案例分析:

 

定义Bean组件,并使用spring注解修饰,例如

 

publicinterfaceSysConfigDao {}

 

@Repository

publicclassSysConfigDaoimpl implements SysConfigDao  {}

 

 

publicinterfaceSysConfigService {}

@Service

publicclassSysConfigServiceImpl implements SysConfigService  {}

 

 

@Controller

publicclassSysConfigController {}

 

@Configuration

publicclassAppConfig {}

 

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

 

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

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

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

 

@Scope("singleton")

@Component

publicclassOpenDataSource{

}

 

其中:

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

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

 

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

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

 

@Scope//默认是singleton

@Component

publicclassOpenDataSource {

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

@PostConstruct

publicvoid init(){

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

}

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

@PreDestroy

publicvoid destory(){

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

}

}

 

说明:生命周期方法注解需要在JDK1.7以后版本使用

 

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

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

 

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

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

3)   @Resource 可以修饰属性或set方法,默认依据名字以上是关于Spring IOC高级的主要内容,如果未能解决你的问题,请参考以下文章

Day51~(spring注解高级IOC)51

Spring框架学习[IoC容器高级特性]

学习笔记——Spring底层IOC实现;Spring依赖注入数值问题;Spring依赖注入方式

Spring IOC高级特性:lazy-Init 延迟加载FactoryBean 和 BeanFactory后置处理器

spring IOC容器的扩展

Spring IoC 容器的扩展