Spring 的注入主要分为三种:这里只介绍两种,set注入和构造方法注入(1)配置xml文件,可到spring的API文档去找applicationContext,这里就直接以这个命名了“applicationContext.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">
<!-- Dao层注入配置 -->
<bean id="UserDaoForOracleImp" class="cn.eduask.spring.dao.UserDaoForOracleImp"/>
<bean id="UserDaoForMySqlImp" class="cn.eduask.spring.dao.UserDaoForMySqlImp"/>
<!-- Service层注入配置 Set方法方式 -->
<bean id="UserManagerImp" class="cn.eduask.spring.service.UserManagerImp">
<property name="userDao" ref="UserDaoForMySqlImp"></property>
</bean>
<!-- Service层注入配置 构造方法方式 -->
<!-- <bean id="UserManagerImp" class="cn.eduask.spring.service.UserManagerImp">
<constructor-arg ref="UserDaoForOracleImp"></constructor-arg>
</bean> -->
<!-- Action层注入配置 -->
</beans></span>
(2)配置操作层
public interface IUserDao {
public void save(String username,String userpass);
}
public class UserDaoForMySqlImp implements IUserDao {
public void save(String username, String userpass) {
System.out.println("---------------UserDaoForMySqlImp.save()----------------");
System.out.println("用户名 :" + username );
System.out.println("密码 :" + userpass );
}
public void del(){
System.out.println("---------del()--------");
}
}
public class UserDaoForOracleImp implements IUserDao {
public void save(String username, String userpass) {
System.out.println("---------------UserDaoForOracleImp.save()----------------");
System.out.println("用户名 :" + username );
System.out.println("密码 :" + userpass );
}
}
public interface IUserManager {
public void save(String username,String userpass);
}
public class UserManagerImp implements IUserManager {
IUserDao userDao;
public UserManagerImp(){
}
public UserManagerImp(IUserDao userDao){
this.userDao = userDao;
}
//数据保存方法封装
public void save(String username, String userpass) {
this.userDao.save(username, userpass);
}
public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
}
}
public class UserTest {
public static void main(String[] args) {
// 实例化 Spring IOC 容器的方式一 -- 推举方式
//BeanFactory factory1 = new ClassPathXmlApplicationContext("applicationContext.xml");
<span style="white-space:pre"> </span>// 实例化 Spring IOC 容器的方式二
<span style="white-space:pre"> </span>/*ClassPathResource classPathResource = new ClassPathResource(
<span style="white-space:pre"> </span>"applicationContext.xml");
<span style="white-space:pre"> </span> BeanFactory factory2 = new XmlBeanFactory(classPathResource); */
<span style="white-space:pre"> </span> // 实例化 Spring IOC 容器的方式三
<span style="white-space:pre"> </span> ApplicationContext context2 = new ClassPathXmlApplicationContext(
<span style="white-space:pre"> </span> new String[] { "applicationContext-dao.xml",
"applicationContext-ser.xml" });
<span style="white-space:pre"> </span> BeanFactory factory3 = context2;
<span style="white-space:pre"> </span>// 实例化 Spring IOC 容器的方式四 -- 推举方式
//BeanFactory factory4 = new ClassPathXmlApplicationContext("applicationContext-*.xml");
// 测试:实例化userManager对象
//IUserManager userManager = (IUserManager)factory1.getBean("UserManagerImp");
// 当前是哪个对象在调用save方法
//userManager.save("eduask", "stone");
}
}
一般都通过set来注入,需要注意的是当采用这种方法注入时,在应用层UserManagerImp中需要加一个空构造方法,否则会报异常,不妨可以亲自测试一下。