Spring對象依賴關係

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>
相關文章
相關標籤/搜索