01_全面阐释Spring及其各项功能
(2009-12-29 9:11:23)
Spring :
是开源的控制反转IOC和面向切面AOP的容器框架。主要目的就是为了简化企业开发。
IOC 控制反转:
应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护由外部容器负责。控制权由应用转移到了外部容器,控制权的转移就是所谓的反转。
依赖注入:
在运行期,由外部容器动态地将依赖对象注入到组件中。
02_搭建与测试Spring的开发环境
(2009-12-29 11:16:11)
Spring 环境所需要的jar,拷贝到类路径下
下载spring-framework-2.5.6-with-dependencies.zip,提取如下2个jar
dist/spring.jar
lib/jakarta-commons/commons-logging.jar
若使用切面编程AOP,则需提取下列3个jar
lib/aspectj/aspectjweaver.jar 和 aspectjrt.jar
lib/cglib/cglib-nodep-2.1_3.jar
若使用JSR-250中的注解,则需提取下列1个jar
lib/j2ee/common-annotations.jar
建立spring java项目
1、导入所需要的jar
2、在src目录下建立beans.xml,内容如下
实例化spring容器
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});//不止一个配置文件,数组方式
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");//单个配置文件
3、建立JUnit 测试
在junit.test包下建立SpringTest.java,内容如下
进行测试通过。
4、在com.nbchina.service.impl包下建立PersonServiceBean.java,内容如下
对此文件进行重构抽取接口,接口名称 PersonService
移动接口到com.nbchina.service包下
5、在beans.xml文件内加入
<bean id="personService" class="com.nbchina.service.impl.PersonServiceBean"></bean>
6、在测试文件SpringTest.java文件中,加入如下内容
PersonService personService=(PersonService) ctx.getBean("personService");
personService.save();
进行测试通过。
03_编码剖析Spring管理Bean的原理
(2009-12-29 13:56:58)
深刻理解怎样读取Bean。详细模拟容器读取xml代码日后加上。
04_Spring的三种实例化Bean的方式
(2009-12-29 14:46:58)
1、使用类构造器实例化 [大部分情况下,使用类构造器实例化。]
<bean id="personService" class="com.nbchina.service.impl.PersonServiceBean"/>
2、使用静态工厂方法实例化
<bean id="personService2" class="com.nbchina.service.impl.PersonServiceBeanFactory" factory-method="createPersonServiceBean"/>
public class PersonServiceBeanFactory{
public static PersonServiceBean createPersonServiceBean(){
return new PersonServiceBean();
}
}
3、使用实例工厂方法实例化
<bean id="personServiceFactory" class="com.nbchina.service.impl.PersonServiceBeanFactory"/>
<bean id="personService3" factory-bean="personServiceFactory" factory-method="createPersonServiceBean"/>
public class PersonServiceBeanFactory{
public PersonServiceBean createPersonServiceBean(){
return new PersonServiceBean();
}
}
05_配置Spring管理的bean的作用域
(2009-12-29 15:11:27)
1、singleton 单例模式
每次从容器获取bean都是同样的对象,默认的。
2、prototype
每次从容器获取bean都是新的对象
<bean id="personService" class="com.nbchina.service.impl.PersonServiceBean" scope="prototype "></bean>
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
PersonService personService1=(PersonService) ctx.getBean("personService");
PersonService personService2=(PersonService) ctx.getBean("personService");
System.out.println(personService1=personService2); //默认单例模式,输出是true。配置标注好bean作用域prototype。则输出是false
06_Spring管理的Bean的生命周期
1、默认情况下,单例的,在容器实例化的时候就实例化了。
单例情况下,<bean id="personService" class="com.nbchina.service.impl.PersonServiceBean" lazy-init="true"></bean>,则延迟实例化,调用getBean的时候实例化
当bean的作用域范围是 scope="prototype"的时候,在调用getBean方法的时候实例化。
2、初始化
容器通过反射技术调用
<bean id="personService" class="com.nbchina.service.impl.PersonServiceBean" init-method="init"></bean>
PersonServiceBean.java内容如下
public class PersonServiceBean implements PersonService {
public void init(){
System.out.println("初始化");
}
public PersonServiceBean(){//构造函数
System.out.println("我被实例化了");
}
public void save(){
System.out.println("我是保存方法");
}
}
测试通过,先输出 实例化,在输出初始化。
3、释放资源
<bean id="personService" class="com.nbchina.service.impl.PersonServiceBean" init-method="init" destroy-method="destory"></bean>
public class PersonServiceBean implements PersonService {
public void init(){
System.out.println("初始化");
}
public PersonServiceBean(){//构造函数
System.out.println("我被实例化了");
}
public void save(){
System.out.println("我是保存方法");
}
public void destory(){
System.out.println("关闭打开的资源");
}
}
07_编码剖析Spring依赖注入的原理-08_编码剖析Spring装配基本属性的原理
(2009-12-29 17:00:05)
编码剖析部分略,日后添加。
注入依赖对象方式两种
方式一 通过ref属性把依赖对象注入到组件内部
<bean id="personDao" class="com.nbchina.service.impl.PersonDaoBean"/>
<bean id="personService" class="com.nbchina.service.impl.PersonServiceBean">
<property name="personDao" ref="personDao"/>
</bean>
方式二 通过内部bean的方式注入
<bean id="personService" class="com.nbchina.service.impl.PersonServiceBean">
<property name="personDao">
<bean class="com.nbchina.service.impl.PersonDaoBean"/>
</property>
</bean>
1、com.nbchina.service.impl包内新建类PersonDaoBean
重构抽取接口,移动接口。
2、PersonServiceBean.java 内容如下
09_set属性方式注入集合类型
(2009-12-30 09:51:26)
如下四中集合类型,使用set方式注入
private Set<String> sets = new HashSet<String>();
private List<String> lists = new ArrayList<String>();
private Properties properties = new Properties();
private Map<String,String> maps = new HashMap<String,String>();
1、beans.xml文件
2、PersonService.java文件
3、PersonServiceBean.java 文件
4、SpringTest.java文件
10_使用构造器注入
(2009-12-30 09:51:26)
1、beans.xml 内容如下
2、PersonServiceBean.java 内容如下
3、SpringTest.java文件内容如下