默认在spring容器初始化时(即new ClassPathXmlApplicationContext("beans.xml")),对容器中的类进行实例化, 而不是getBean方法时(一般将取得的对象赋值给某个对象);当scope为prototype时,则在调用getBean方法时容器中的类被初始化了;当初始化的状态改为‘lazy-init’=true时, 则在getBean调用时才被初始化。可以设定全局的,也可设定某个类的lazy-init属性。
默认情况下(即scope为singleton)生成的对象为单例的, 当prototype时生成多例对象。
在spring的配置文件中,可以通过init-method和destroy-method指定类中那个方法需要在初始化时就执行,哪些方法需要在容器关闭时被执行。可以通过执行AbstractBeanFactory的close()方法来销毁容器来进行实验。
- package cn.company.service.impl;
- import cn.company.service.PersonService;
- public class PersonServiceBean implements PersonService {
- public void init(){
- System.out.println("初始化");
- }
- public PersonServiceBean(){
- System.out.println("我被实例化了");
- }
- public void save(){
- System.out.println("我是save()方法");
- }
- public void destory(){
- System.out.println("开闭打开的资源");
- }
- }
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
- <bean id="personService" class="cn.company.service.impl.PersonServiceBean" lazy-init="false"
- init-method="init" destroy-method="destory">
- </bean>
- </beans>
- <bean id="personService" class="cn.company.service.impl.PersonServiceBean">
- <constructor-arg index="0" type="cn.company.dao.PersonDao" ref="personDao"/>
- <constructor-arg index="1" value="播客"/>
- </bean>
要将一个属性null,需要通过<null />标签,如果不设置,则属性为默认值(在实例化时)而不是null。 <property name=”name”><null /> </property>。可参考:http://blog.163.com/jack-chen10/blog/static/67751282009813112916553/
7. Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合(重要)
i. spring.jar , jarkata-commons/commons-loggin.jar
i. Location: D:\share\0900_Spring\soft\spring-framework-2.5.6\dist\resources\spring-beans-2.5.xsd
ii. URI: file:///D:/share/0900_Spring/soft/spring-framework-2.5.6/dist/resources/spring-beans-2.5.xsd
iii. Key Type: Schema Location
iv. Key: http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
d) 接口注入(可以忘记)
a) 修改xml文件,参考文档<context:annotation-config />
b) beans.xml <aop:aspectj-autoproxy />
c) 此时就可以解析对应的Annotation了
i. <aop:aspect …..
i. c3p0
ii. dbcp
iii. proxool
i. <property dataSource
ii. <annotatedClasses
i. 加入annotation.xsd
ii. 加入txManager bean
iii. <tx:annotation-driven
iv. 在需要事务的方法上加:@Transactional
v. 需要注意,使用SessionFactory.getCurrentSession 不要使用OpenSession
i. 什么时候rollback
i. <bean txmanager
ii. <aop:config
iii. <tx:advice: id transaction-manager =
i. 设计模式:Template Method
ii. Callback:回调/钩子函数
iii. 第一种:(建议)
iv. 第二种:
jar
包名称
|
所在位置
|
说明
|
antlr-2.7.6.jar
|
hibernate/lib/required
|
解析HQL
|
aspectjrt
|
spring/lib/aspectj
|
AOP
|
aspectjweaver
|
..
|
AOP
|
cglib-nodep-2.1_3.jar
|
spring/lib/cglib
|
代理,二进制增强
|
common-annotations.jar
|
spring/lib/j2ee
|
@Resource
|
commons-collections-3.1.jar
|
hibernate/lib/required
|
集合框架
|
commons-fileupload-1.2.1.jar
|
struts/lib
|
struts
|
commons-io-1.3.2
|
struts/lib
|
struts
|
commons-logging-1.1.1
|
单独下载,删除1.0.4(struts/lib)
|
struts
spring
|
dom4j-1.6.1.jar
|
hibernate/required
|
解析xml
|
ejb3-persistence
|
hibernate-annotation/lib
|
@Entity
|
freemarker-2.3.13
|
struts/lib
|
struts
|
hibernate3.jar
|
hibernate
|
|
hibernate-annotations
|
hibernate-annotation/
|
|
hibernate-common-annotations
|
hibernate-annotation/lib
|
|
javassist-3.9.0.GA.jar
|
hiberante/lib/required
|
hibernate
|
jta-1.1.jar
|
..
|
hibernate transaction
|
junit4.5
|
|
|
mysql-
|
|
|
ognl-2.6.11.jar
|
struts/lib
|
|
slf4j-api-1.5.8.jar
|
hibernate/lib/required
|
hibernate-log
|
slf4j-nop-1.5.8.jar
|
hibernate/lib/required
|
|
spring.jar
|
spring/dist
|
|
struts2-core-2.1.6.jar
|
struts/lib
|
|
xwork-2.1.2.jar
|
struts/lib
|
struts2
|
commons-dbcp
|
spring/lib/jarkata-commons
|
|
commons-pool.jar
|
..
|
|
struts2-spring-plugin-2.1.6.jar
|
struts/lib
|
|
i. 建立对应的package
ii. 建立对应的接口与类框架
iii. 建立spring的配置文件(建议自己保留一份经常使用的配置文件,以后用到的时候直接copy改)
iv. 建立数据库
v. 加入Hibernate注解
vi. 写dao service的实现
vii. 加入Spring注解
viii. 写测试
i. 结合点:Struts2的Action由Spring产生
ii. 步骤:
a) 修改配置,由spring替代struts产生Action对象
a) 把类名改为bean对象的名称,这个时候就可以使用首字母小写了
b) @Scope(“prototype”)不要忘记
iii. struts的读常量:
iv. 中文问题:
v. LazyInitializationException