Bean 的属性注入有两种方式
①构造器注入
②setter注入(重点)
一、构造器注入
Spring使用构造器注入Bean属性 提供对应参数的构造器 为Bean配置使用构造器注入
/** *实体类 */ public class User { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public User(){ System.out.println("User.User()无参构造"); } public User(String name,int age){ System.out.println("User.User()有参构造"); this.name = name; this.age = age; } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; } } <!-- 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.xsd"> <bean id="user" class="com.wd.bean.User"> <constructor-arg index="0" value="张三"></constructor-arg> <constructor-arg index="1" value="12"></constructor-arg> </bean> </beans> /** * 测试类 * @author Thinkpad * */ public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); User user = (User) ac.getBean("user"); System.out.println(user); } }
结果:
二、setter注入Bean属性(重点)
① Spring使用属性对应的setter方法为属性注入资源 为属性提供对应的setter方法
//实体类如上 <!--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.xsd"> <bean id="user" class="com.wd.bean.User"> <property name="name" value="李四"/> <property name="age" value="55"/> </bean> </beans> /** * 测试类 * @author Thinkpad * */ public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); User user = (User) ac.getBean("user"); System.out.println(user); } }
输出结果:
②Spring注入引用类型的对象,必须保障该对象以 Bean形式存在于IoC容器,受Spring控制 为属性提供对应的setter方法
//dao接口 public interface DaoI { public void add(); public void del(); public void update(); } //dao接口实现类 public class MyDaoTest implements DaoI { @Override public void add() { System.out.println("MyDaoTest.add()MyDaoTest dao被调用了"); } @Override public void del() { // TODO Auto-generated method stub } @Override public void update() { // TODO Auto-generated method stub } } //service方法 package com.wd.service; import com.wd.dao.DaoI; public class UserService { //使用接口作为new的dao类型 private DaoI userDao; public DaoI getUserDao() { return userDao; } public void setUserDao(DaoI userDao) { this.userDao = userDao; } public void register(){ System.out.println("UserService.register() Service被调用了"); userDao.add(); } public void updateUser(){ userDao.update(); } } //action 类 public class UserAction { private UserService userService; public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } public String register(){ userService.register(); return "success"; } } <!--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.xsd"> <bean id="userAction" class="com.wd.action.UserAction"> <property name="userService" ref="userService"></property> </bean> <bean id="userService" class="com.wd.service.UserService"> <property name="userDao" ref="userDao"></property> </bean> <!--此userDao相当于DaoI userDao = new MyDaoTest();--> <bean id="userDao" class="com.wd.dao.MyDaoTest"></bean> </beans> /** * 测试类 * @author Thinkpad * */ public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); UserAction userAction = (UserAction) ac.getBean("userAction"); userAction.register(); } }
输出结果: