您好,登錄后才能下訂單哦!
本篇內容主要講解“Spring中Bean的裝配方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Spring中Bean的裝配方法是什么”吧!
Bean的裝配可以理解為依賴關系注入,Bean的裝配方式即Bean依賴注入的方式。Spring容器支持多種形式的Bean的裝配方式,如基于XML的裝配、基于注解(Annotation)的裝配和自動裝配(其中最常用的是基于注解的裝配),本文章將主要講解著三種裝配方式的使用。
條件:①Bean類必須有一個無參構造方法;②Bean類必須為屬性提供setter方法。
在配置文件中,使用<property>元素來為每個屬性注入值
條件:Bean類必須提供有參構造方法
在配置文件中,使用<constructor-arg>元素來為參數注入值
創建Java類User,提供有參、無參構造方法以及屬性setter方法;
package com.ssm.assemble; import java.util.List; public class User { private String username; private Integer password; private List<string> list; /** * 1.使用構造注入 * 1.1提供帶所有參數的有參構造方法。 */ public User(String username, Integer password, List<string> list) { super(); this.username = username; this.password = password; this.list = list; } /** * 2.使用設值注入 * 2.1提供默認空參構造方法 ; * 2.2為所有屬性提供setter方法。 */ public User() { super(); } public void setUsername(String username) { this.username = username; } public void setPassword(Integer password) { this.password = password; } public void setList(List<string> list) { this.list = list; } @Override public String toString() { return "User [username=" + username + ", password=" + password + ", list=" + list + "]"; } }
創建Spring配置文件beans1.xml,使用以上兩種方式裝配Bean;
<!--?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-4.3.xsd"> <!--1.使用構造注入方式裝配User實例 --> <bean id="user1" class="com.ssm.assemble.User"> <constructor-arg index="0" value="小紅" /> <constructor-arg index="1" value="987654" /> <constructor-arg index="2"> <list> <value>"constructorvalue1"</value> <value>"constructorvalue2"</value> </list> </constructor-arg> </bean> <!--2.使用設值注入方式裝配User實例 --> <bean id="user2" class="com.ssm.assemble.User"> <property name="username" value="小明"></property> <property name="password" value="123456"></property> <!-- 注入list集合 --> <property name="list"> <list> <value>"setlistvalue1"</value> <value>"setlistvalue2"</value> </list> </property> </bean> </beans>
創建測試類XmlBeanAssembleTest,測試程序;
package com.ssm.assemble; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class XmlBeanAssembleTest { public static void main(String[] args) { // 定義配置文件路徑 String xmlPath = "beans1.xml"; // 加載配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); // 構造方式輸出結果 System.out.println(applicationContext.getBean("user1")); // 設值方式輸出結果 System.out.println(applicationContext.getBean("user2")); } }
運行效果。
由于基于XML的裝配可能會導致XML配置文件過于臃腫,給后續的維護和升級帶來一定的困難。因此,Spring提供了對Annotation(注解)技術的全面支持。
創建數據訪問(Dao)層接口UserDao;
package com.ssm.annotation; public interface UserDao { public void save(); }
創建數據訪問(UserDao)層接口的實現類UserDaoImpl,并且在實現類前添加對應的注解@Repository("userDao");
package com.ssm.annotation; import org.springframework.stereotype.Repository; @Repository("userDao") //@Repository("userDao")相當于配置文件中的:<bean id="userDao" class="com.ssm.annotation.UserDaoImpl" /> public class UserDaoImpl implements UserDao{ @Override public void save() { System.out.println("userdao...save..."); } }
創建業務(Service)層接口UserService;
package com.ssm.annotation; public interface UserService { public void save(); }
創建業務(Service)層接口的實現類UserServiceImpl并添加屬性對象UserDao的setter方法,并在實現類前添加對應的注解@Service("userService")和在類里面方法前添加對應的注解 @Resource(name="userDao");
package com.ssm.annotation; import javax.annotation.Resource; import org.springframework.stereotype.Service; @Service("userService") //相當于配置文件中的:<bean id="userService" class="com.ssm.annotation.UserServiceImpl" /> public class UserServiceImpl implements UserService{ @Resource(name="userDao") //當于配置文件中的:<property name="userDao" ref="userDao" /> private UserDao userDao; public void save() { //調用userDao中的save方法 this.userDao.save(); System.out.println("userservice....save..."); } public void setUserDao(UserDao userDao) { this.userDao = userDao; } }
創建控制(Controller)層Java類UserController,并在實現類前添加對應的注解@Controller("userController")和在類里面方法前添加對應的注解 @Resource(name="userService");
package com.ssm.annotation; import javax.annotation.Resource; import org.springframework.stereotype.Controller; @Controller("userController") //相當于配置文件中的:<bean id="userController" class="com.ssm.annotation.UserController" /> public class UserController { @Resource(name="userService") //當于配置文件中的:<property name="userService" ref="userService" /> private UserService userService; public void save(){ this.userService.save(); System.out.println("userController...save..."); } public void setUserService(UserService userService) { this.userService = userService; } }
創建Spring配置文件beans2.xml,開啟注解和定義Bean;
<!--?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:context="http://www.springframework.org/schema/context" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 使用 context 命名空間 ,在配置文件中開啟相應的注解處理器 --> <context:annotation-config /> <!--使用 context 命名空間 ,通知Spring掃描指定包下所有Bean類,進行注解解析--> <context:component-scan base-package="com.ssm.annotation" /> </beans>
創建測試類AnnotationAssembleTest,測試程序;
package com.ssm.annotation; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class AnnotationAssembleTest { public static void main(String[] args) { // 定義配置文件路徑 String xmlPath = "beans2.xml"; // 加載配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); // 獲取UserController實例 UserController userController = (UserController) applicationContext.getBean("userController"); // 調用UserController中的save()方法 userController.save(); } }
運行效果。
所謂自動裝配,就是將一個Bean自動的注入到到其他Bean的Property中。 Spring的<bean>元素中包含一個autowire屬性,我們可以通過設置autowire的屬性值來自動裝配Bean。autowire屬性有5個值,其值及說明下表所示:
這里只需要在基于注解的裝配配置文件(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" xmlns:context="http://www.springframework.org/schema/context" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 使用 context 命名空間 ,在配置文件中開啟相應的注解處理器 --> <!--<context:annotation-config />--> <!--<!–分別定義3個Bean實例 –>--> <!--<bean id="userDao" class="com.ssm.annotation.UserDaoImpl" />--> <!--<bean id="userService" class="com.ssm.annotation.UserServiceImpl" />--> <!--<bean id="userController" class="com.ssm.annotation.UserController" />--> <!--<!–使用 context 命名空間 ,通知Spring掃描指定包下所有Bean類,進行注解解析–>--> <!--<context:component-scan base-package="com.ssm.annotation" />--> <!-- 使用bean元素的autowire屬性完成自動裝配 --> <bean id="userDao" class="com.ssm.annotation.UserDaoImpl" /> <bean id="userService" class="com.ssm.annotation.UserServiceImpl" autowire="byName" /> <bean id="userController" class="com.ssm.annotation.UserController" autowire="byName" /> </beans>
運行效果和基于注解的裝配一樣
到此,相信大家對“Spring中Bean的裝配方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。