一、Spring的作用及优势
Spring用于整合软件开发中的各种框架,提供组件之间松耦合的平台,目的是将耦合度降至最低,即解耦。
spring是一种开源框架。
spring为javaee应用提供轻量级的解决方案。
spring提倡最少侵入。
spring是一个优秀的mvc框架。
spring基于依赖注入的核心机制,基于aop的声明式事务管理。
我们使用spring框架,主要是使用它的两个特性:IOC和AOP,用IOC整合组件,用AOP管理事务。
(1)依赖注入(DI):在运行期,由外部容器(beanFactory)动态的将依赖对象(dao)注入到组件(action)中。
(2)控制反转(IOC):应用(action)本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器(beanfactory)负责的。这样控制权就由应用转移到了外部容器(配置文件),控制权的转移就是所谓的反转。控制反转和依赖注入是不同角度的同一概念。DI是IOC实现的一种手段,IOC的理论通过DI实现。
(3)面向切面编程(面向方面、AOP):可以通过预编译方式和运行期动态代理实现在不修改源代码的前提下给程序动态统一的添加功能的一种技术。
二、spring容器实例化的方式
(1)BeanFactory
XMLBeanFactory-->Resource-->ClassPathResource\FileSystemResource
(2)ApplicationContext(推荐)
ClassPathXmlApplicationContext\FileSystemXmlApplicationContext
三、Bean注入方式与注入类型
注入方式:
(1)setter注入(默认)
<bean><property name="dao" ref="xxxDao"></property></bean>
(2)构造方法注入
<bean><constructor-arg ref="xxxDao"></constructor-arg></bean>
(3)注解
1>扫描bean组件的注解,相当于<bean>
@Service 用于service业务组件
@Control 用于action控制组件
@Repository 用于dao数据访问组件
@Component 用于其他组件
bean组件扫描到容器后,默认名字为类名(首字母小写),如果需要自定义名称可以使用@Service("id名")
2>依赖注入的注解标记
@Resource(name="") 相当于<property> JDK提供的先按类型,然后按名称来自动装配
@Autowired 和resource一样,spring提供的先按名称,后按类型来自动装配
@Qualifier("id名")
@Resource按照名字注入的方式比较简单,@Autowired按照名字注入需要再加一个注解@Qualifier("")
3>其他注解
@Scope 相当于<bean scope="">
@PostConstruct 等价于<bean init-method="">
@PreDistroy 等价于<bean destroy-method="">
注解方式和xml方式的比较:
注解方式的优点是使用方便,缺点是和java代码混合在一起,修改不易
xml方式的优点是修改容易,缺点是配置工作量大
注入数据类型:
(1)引用型注入 ref
(2)基本数据类型注入 value
(3)集合类型注入 list、set、map、props
四、spring实例化bean
(1)用构造器实例化
<bean id="" class=""></bean>
(2)用静态工厂方法实例化
<bean id="" class="xxFactroryClass" factory-method=""></bean>
(3)用实例工厂方法实例化
<bean id="xxxfactory" class=""></bean>
<bean id="" factory-bean="xxxfactory" factory-method=""></bean>