spring2.5 学习笔记 第11页 共46页
使用表示,重新new一个bean然后注入进去, 使用[表示,使用已经new好的bean,这是只是引用它。 --> ] 使用和其子标签或[进行构造方法注入 当构造方法注入时,构造方法中有多个参数时,可以使用以下两种方式注入: bean代码: public class ExampleBean { private int years; private String ultimateAnswer; public ExampleBean(int years, String ultimateAnswer) { this.years = years; this.ultimateAnswer = ultimateAnswer; } } 1、参数类型方式进行区分参数: xml配置文件: 注意:这样就是参数类型为int的注入7500000,而参数类型为java.lang.String的参数注入”42”,但这个方法不适合多个参数是相同的类型。 2、利用索引进行区分参数 xml配置文件 注意:index=0的注入到第一个参数,index=1的注入到第二个参数。 构造方法的注入不方便,所以我们需要使用setter注入方式。 四、 id、name ]
注xml配置文件中标签中的属性名称如下:
或 以上标签中的属性id与name作用是一样, 唯一的区别:id中不可以含有特殊字符,而name中可以有特殊字符 spring2.5 学习笔记 第12页 共46页
五、 简单属性的注入
当bean中存在简单属性时的注入方式: bean代码如下: public class UserDaoImpl implements UserDao { private int daoId; private String daoStatus; public int getDaoId() { return daoId; } public void setDaoId(int daoId) { this.daoId = daoId; } public String getDaoStatus() { return daoStatus; } public void setDaoStatus(String daoStatus) { this.daoStatus = daoStatus; } @Override public void save(User u) { System.out.println(\); } } xml配置文件如下: good 直接使用 value属性或是子标签来注入 六、 Bean的作用范围scope
在Spring配置文件中的标签可以指定bean的作用范围 利用标签中的scope属性来指定 scope值: 1、 singleton单例:每次取出的bean都是同一个bean。默认就是这个 2、 prototype原型:每次取的bean时,都会重新创建一个新的bean 3、 request 4、 session 5、 globalsession 实例: spring2.5 学习笔记 第13页 共46页
注意:只有spring与web框架结合时才会使用request/session/globalsession,但也非常少用,因为其它框架已经有功能非常强大的scope了(例如:struts的scope)
七、 集合注入
很少用,不重要,参考程序 administrator@example.org support@example.org development@example.org a list element followed by a reference
just some string 八、 自动装配autowire
含义:在bean注入时不需要我们来指定注入哪个具体的bean,而spring容器会根据我的使用autowire属性来确定自动装配功能。
autowire值:
1、 autodetect;
spring2.5 学习笔记 第14页 共46页
2、 byName:根据bean中成员属性的名称来自动装配 3、 byType:根据bean中成员属性的类型来自动装配。 4、 constaractor
5、 default:会根据标签中的default-autowire属性来进行自动装配的方式 6、 no(默认就是这个,需要手动指定注入那个bean)
(一) byName 根据bean中成员属性的名称来自动装配。 bean代码: UserDaoImpl类 public class UserDaoImpl implements UserDao { UserService类 public class UserService { spring的配置文件 测试代码: public void testAdd_4() throws Exception { } ApplicationContext factory = new ClassPathXmlApplicationContext(\); UserService service = (UserService)factory.getBean(\); System.out.println(service.getUserDao()); private UserDao userDao = new UserDaoImpl(); public UserDao getUserDao() { } public void setUserDao(UserDao userDao) { } public void add(User u){ }} userDao.save(u); this.userDao = userDao; return userDao; private int daoId; public int getDaoId() {return daoId;} public void setDaoId(int daoId) {this.daoId = daoId; } @Override public String toString(){ }} return \ + this.daoId; spring2.5 学习笔记 第15页 共46页
结果:daoId=1 说明:因为在配置文件中配置了两个UserDaoImpl(名称分别:userDao、userDao2)和一个UserService类。而在userService的bean中并没有进行注入配置。而是使用了autowire属性指定了byName值,这样结果是正确的,是因为spring看到autowire=byName后,会在配置文件中查找bean的id与userService成员属性名称一至,然后将其注入,这样就完成了根据名称自动装配功能。 (二) byType 根据类型自动装配:就是spring在初始化时,会在配置文件中查找的类型与userService成员属性的类型相比较,类型一致的将其注入,这样就完成了根据类型自动装配。
(三) 注意
1、 自动装配使用并不多;
2、 只有在使用anntation注解时会使用的。
3、 byType如果出现相同类型在两个以上,就会出现异常。
九、 生命周期
(一) lazy-init/default-lazy-init
(不重要) bean的何时初始化 lazy-init值:default:表示使用标签中的default-lazy-init值 例如: (二) init-method destroy-method 不要和prototype一起用(了解) init-method:用于标签中的属性,表示在初始化这个bean之前所需要的执行方法 destroy-method:用于标签中的属性,表示在这个bean销毁时所需要的执行方法。例如关闭连接池。 注意:此属性不要与scpoe=”prototype”一起使用,否则会出现其它的问题。 例如: true:表示context在初始化时,不会初始化这个bean,只有在使用时才会初始化 false:表示context在初始化时,就会初始化这个bean