【spring框架5】spring的注入型別剖析
阿新 • • 發佈:2018-12-12
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u013517797/article/details/43701405
注入型別: a)Setter(重要) b)構造方法 c)介面注入 1.Setter注入: 例子:
package cn.edu.hpu.service; import cn.edu.hpu.dao.UserDao; import cn.edu.hpu.dao.Impl.UserDaoImpl; import cn.edu.hpu.model.User; public class UserService { private UserDao userDao; public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void add(User u){ this.userDao.save(u); } }
在beans.xml配置:
<?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="u" class="cn.edu.hpu.dao.Impl.UserDaoImpl"> </bean> <bean id="userService" class="cn.edu.hpu.service.UserService"> <property name="userDao" ref="u" /> </bean> </beans>
測試:
@Test
public void testAdd() throws Exception{
BeanFactory ctx=new ClassPathXmlApplicationContext("beans.xml");
UserService userService=(UserService)ctx.getBean("userService");
User u=new User();
u.setUsername("u1");
u.setPassword("p1");
userService.add(u);
}
測試成功! 2.構造方法注入:
例子:
UserService.java:
package cn.edu.hpu.service;
import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.dao.Impl.UserDaoImpl;
import cn.edu.hpu.model.User;
public class UserService {
private UserDao userDao;
public UserService(){
}
public UserService(UserDao userDao){
super();
this.userDao=userDao;
}
}
在beans.xml配置:
<?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="u" class="cn.edu.hpu.dao.Impl.UserDaoImpl">
</bean>
<bean id="userService" class="cn.edu.hpu.service.UserService">
<constructor-arg>
<ref bean="u"/>
</constructor-arg>
</bean>
</beans>
如果在<constructor-arg>中加<bean class="xy.bar">相當於重新new了一個bean。 而上面的<ref bean="u"/>是參考了另外的已經初始化的一些bean。
測試:
@Test
public void testAdd() throws Exception{
BeanFactory ctx=new ClassPathXmlApplicationContext("beans.xml");
UserService userService=(UserService)ctx.getBean("userService");
User u=new User();
u.setUsername("u1");
u.setPassword("p1");
userService.add(u);
}
測試成功! 注意:構造方法裡如果有兩個引數,這兩個引數是同一個型別,那麼在傳值的時候,哪個傳在第一個,哪個傳在第二個呢?在XML如何配置? 可以定索引,也可以定型別。 這裡介紹定索引:
<bean id="userService" class="cn.edu.hpu.service.UserService">
<constructor-arg index="0" value="75800000"/>
<constructor-arg index="1" value="42"/>
</bean>
用index來制定傳值的順序(型別不一樣要指定type屬性,如type="int") 構造方法的使用並不多。
3.介面注入:使用極少,用到再查