Spring中,如何給對象的屬性賦值? 【DI, 依賴注入】spring
1) 經過構造函數ide
2) 經過set方法給屬性注入值函數
3) p名稱空間優化
4)自動裝配(瞭解)this
5) 註解spa
package loaderman.c_property; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { // 建立容器對象 private ApplicationContext ac = new ClassPathXmlApplicationContext("loaderman/c_property/bean.xml"); @Test public void testSet() { // 從容器中獲取 User user = (User) ac.getBean("user"); System.out.println(user); } @Test public void testExecuteAction() { // 從容器中獲取Action UserAction userAction = (UserAction) ac.getBean("userAction"); userAction.execute(); } }
package loaderman.c_property; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App_p { // 建立容器對象 private ApplicationContext ac = new ClassPathXmlApplicationContext("loaderman/c_property/bean_p.xml"); @Test public void testExecuteAction() { // 從容器中獲取Action UserAction userAction = (UserAction) ac.getBean("userAction"); userAction.execute(); System.out.println(ac.getBean("user")); } }
package loaderman.c_property; public class User { private int id; private String name; ////////////////// --> 經過容器注入屬性值 public void setId(int id) { this.id = id; } // //--> 經過容器注入屬性值 public void setName(String name) { this.name = name; } //////////////// public int getId() { return id; } public String getName() { return name; } @Override public String toString() { return "User [id=" + id + ", name=" + name + "]"; } public User() { super(); System.out.println("------User對象建立【無參數構造器】------"); } public User(int id, String name) { System.out.println("-----User對象建立【帶參數構造器】--------"); this.id = id; this.name = name; } public void init_user() { System.out.println("建立對象以後,初始化"); } public void destroy_user() { System.out.println("IOC容器銷燬,user對象回收!"); } }
package loaderman.c_property; public class UserAction { // Service: springIOC容器注入 private UserService userService; public void setUserService(UserService userService) { this.userService = userService; } public String execute() { userService.save(); return null; } }
package loaderman.c_property; public class UserDao { public void save() { System.out.println("DB:保存用戶"); } }
package loaderman.c_property; public class UserService { private UserDao userDao; // = new UserDao(); // IOC:對象的建立交給spring的外部容器完成 public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void save() { userDao.save(); } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- ###############對象屬性賦值############### --> <!-- 1) 經過構造函數 --> <bean id="user1" class="loaderman.c_property.User" scope="prototype"> <constructor-arg value="100"></constructor-arg> <constructor-arg value="Tom"></constructor-arg> </bean> <!-- 2) 經過set方法給屬性注入值 --> <bean id="user" class="loaderman.c_property.User" scope="prototype"> <property name="id" value="101"></property> <property name="name" value="Jack"></property> </bean> <!-- 案例: action/service/dao --> <!-- dao instance --> <bean id="userDao" class="loaderman.c_property.UserDao"></bean> <!-- service instance --> <bean id="userService" class="loaderman.c_property.UserService"> <property name="userDao" ref="userDao"></property> </bean> <!-- action instance --> <bean id="userAction1" class="loaderman.c_property.UserAction"> <property name="userService" ref="userService"></property> </bean> <!-- ##############內部bean############## --> <bean id="userAction2" class="loaderman.c_property.UserAction"> <property name="userService"> <bean class="loaderman.c_property.UserService"> <property name="userDao"> <bean class="loaderman.c_property.UserDao"></bean> </property> </bean> </property> </bean> <!-- 給對象屬性注入值: # p 名稱空間給對象的屬性注入值 (spring3.0以上版本才支持) --> </beans>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- ###############對象屬性賦值############### --> <!-- 給對象屬性注入值: # p 名稱空間給對象的屬性注入值 (spring3.0以上版本才支持) --> <bean id="userDao" class="loaderman.c_property.UserDao"></bean> <bean id="userService" class="loaderman.c_property.UserService" p:userDao-ref="userDao"></bean> <bean id="userAction" class="loaderman.c_property.UserAction" p:userService-ref="userService"></bean> <!-- 傳統的注入: <bean id="user" class="cn.loaderman.c_property.User" > <property name="name" value="xxx"></property> </bean> --> <!-- p名稱空間優化後 --> <bean id="user" class="loaderman.c_property.User" p:name="Jack0001"></bean> </beans>