关于SPring的认识
1.什么是Spring
Spring 框架是一个分层架构。
Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架,以IoC(Inverse of Control 反转控制)和AOP(Aspect Oriented Programming 面向切面编程为内核)
2.应用Spring的好处
(1)方便解耦,简化开发
Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
(2)AOP编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
(3)声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程
(4)方便程序的测试
Spring对Junit4支持,可以通过注解方便的测试Spring程序
(5)方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
(6)降低JavaEE API的使用难度
Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低.
3.Spring Ioc控制反转快速入门案例
配置bean被Spring管理
<bean id="collectionBean" class="cn.zyl.pojo.CollectionBean">
public class test {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("appactionContext.xml");
CollectionBean collectionBean = (CollectionBean)applicationContext.getBean("collectionBean");
applicationContext.close();
}
}
小详解:为什莫把bean交给Spring 管理,1.所有的对象都被Spring管理,会具有一定的规范标准。2.能让你的对象更强大
4. 三种实例化bean的方式
- 使用类构造器实例化(默认无参数)
<bean id=“personService" class="com.baidu.PersonServiceImpl"/>
- 使用静态工厂方法实例化(简单工厂模式)
<bean id="helloService" class="cn.zyl.pojo.HelloServiceStaticFactory" factory-method="creatHelloService"></bean>
- 使用实例工厂方法实例化(工厂方法模式):
<bean id="helloServiceFactory" class="cn.zyl.pojo.HelloServiceFactory"></bean> <bean id="helloService" factory-bean="helloServiceFactory" factory-method="creatHelloService"></bean>
2.Bean的命名 id属性和name属性
- 一般情况下,装配一个Bean时,通过指定一个id属性作为Bean的名称
- id 属性在IoC容器中必须是唯一的
- id 的命名要满足XML对ID属性命名规范
- 必须以字母开始,可以使用字母、数字、连字符、下划线、句号、冒号
- 如果Bean的名称中含有特殊字符,就需要使用name属性
<bean name="#person" class="com.baidu.pojo.Person"/>
- 因为name属性可以相同,所以后出现Bean会覆盖之前出现的同名的Bean
######3. Bean的作用域
Spring容器中Bean的生命周期
- instantiate bean对象实例化
- populate properties 封装属性
- 如果Bean实现BeanNameAware 执行 setBeanName
- 如果Bean实现BeanFactoryAware 或者 ApplicationContextAware 设置工厂 setBeanFactory 或者上下文对象 setApplicationContext
- 如果存在类实现BeanPostProcessor (后处理Bean) ,执行postProcessBeforeInitialization(重点)
- 如果Bean实现InitializingBean 执行 afterPropertiesSet
- 调用 指定初始化方法 init
- 如果存在类实现 BeanPostProcessor(处理Bean) ,执行postProcessAfterInitialization
- 执行业务处理
- 如果Bean实现 DisposableBean 执行 destroy(新版本已经取消)
调用 指定销毁方法 customerDestroy
依赖注入(DI)Bean的属性
对于类成员变量,注入方式有三种{Spring支持前两种}
构造函数注入
属性setter方法注入
接口注入
构造函数注入
<bean id="collectionBean" class="cn.zyl.pojo.CollectionBean">
</bean>
<constructor-arg index="0" value="11" ></constructor-arg></bean>
属性setter方法注入
<bean id="collectionBean" class="cn.zyl.pojo.CollectionBean">
<bean>
<!-- <property name="age" value="10"></property>-->
<!-- <property name="name" value="yali"></property>-->
</bean>
集合类型属性注入
1.map
<map>
<entry key="name" value="zuyauna"></entry>
<entry key="age" value="15"></entry>
<entry key="sex" value="nv"></entry>
</map>
2.Properties
<property name="properties">
<props>
<prop key="姓名">xxxx</prop>
<prop key="性别">nv</prop>
</props>
</property>
使用多个XML配置文件
方式一 可以在创建ApplicationContext对象时传入多个配置文件
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext(“beans1.xml”, “beans2.xml”);
方式二 可以在配置文件中通过引入其他配置文件