国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Spring--通過注解來配置bean

2019-11-14 21:51:45
字體:
來源:轉載
供稿:網友
SPRing--通過注解來配置bean

Spring通過注解配置bean  基于注解配置bean  基于注解來配置bean的屬性在classpath中掃描組件  組件掃描(component scanning):Spring能夠從classpath下自動掃描,偵測和實例化具有特定注解的組件?! √囟ǖ慕M件包括:    -@Component:基本注解,標識了一個受Spring管理的組件    -@Responsitory:標識持久層組件    -@Service:標識服務層(業務層)組件    -@Controller:標識表現層組件  對于掃描到的組件,Spring有默認的命名策略:使用非限定類名,第一個字母小寫。也可以在注解中通過value屬性值標識組件的名稱。  當在組件類上使用了特定的注解之后,還需要在Spring的配置文件中聲明<context:component-scan>:    base-package屬性指定一個需要掃描的基類包,Spring容器將會掃描這個基類包里及其子包中的所有類    當需要掃描多個包時,可以使用逗號分隔    如果僅希望掃描特定的類而非基包下的所有類,可使用resource-pattern屬性過濾特定的類,示例:    <context:component-sacn base-package="com.yl.spring.beans" resource-pattern="autowire/*.class"/>    <context:include-filter>子節點表示要包含的目標類    <context:exclude-filter>子節點表示要排除在外的目標類    <context:component-sacn>下可以擁有若干個<context:include-filter>和<context:exclude-filter>子節點<context:include-filter>和<context:exclude-filter>子節點支持多種類型的過濾表達式:

類別示例說明
annotationcom.yl.XxxAnnotation所有標注了XxxAnnotation的類,該類型采用目標類是否標注了某個注解進行過濾
assinablecom.yl.XxxService所有繼承或擴展XxxService的類,該類型采用了目標類是否繼承或擴展某個特定類進行過濾
aspectjcom.yl.*Service所有類名義Service結束的類及繼承或擴展它們的類,該類型采用AspectJ表達式進行過濾
regexcom.yl.anno.*所有com.yl.anno包下的類。該類型采用正則表達式,根據類的類名進行過濾
customcom.yl.XxxTypeFilter采用XxxTypeFilter通過代碼的方式定義過濾原則。該類必須實現org.springframework.core.type.TypeFilter接口

組件裝配<context:component-scan>元素還會自動注冊AutowiredAnnotationBeanPostProcessor實例,該實例可以自動裝配具有@Autowired和@Resource、和@Inject注解的屬性使用@Autowired自動裝配bean  @Autowired注解自動裝配具有兼容類型的單個bean屬性  -構造器,普通字段(即使是非public),一切只有參數的方法都可以應用@Autowired  -默認情況下,所有使用@Autowired注解的屬性都需要被設置,當Spring找不到匹配的bean裝配屬性時,會拋出異常。若某一屬性允許不被設置,可以設置@Autowired注解的required屬性為false  -默認情況下,當IOC容器里存在多個類型兼容的bean時,通過類型的自動裝配將無法工作。此時可以在@Qualifiter注解里提供bean的名稱,Spring允許對方法的入參標注 @Qualifiter已指定注入bean的名稱  -@Autowired注解也可以應用在數組類型的屬性上,此時Spring將會把所有匹配的bean進行自動匹配  -@Autowired注解也可以應用在集合屬性上,此時Spring讀取該集合的類型信息,然后自動裝配所有與之兼容的bean  -@Autowired注解用在java.util.Map上時,若該Map的鍵值作為String,那么Spring將自動裝配與之Map值類型兼容的bean,此時bean的名稱作為鍵值

TestObject.java

1 package com.yl.annotation;2 3 import org.springframework.stereotype.Component;4 5 @Component6 public class TestObject {7     8 }

UserRepository.java接口

1 package com.yl.annotation.repository;2 3 public interface UserRepository {4     public void save();5     6 }

UserRepositoryImpl.java

 1 package com.yl.annotation.repository; 2  3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.stereotype.Repository; 5  6 import com.yl.annotation.TestObject; 7  8 @Repository 9 //@Repository("userRepository")10 public class UserRepositoryImpl implements UserRepository {11     12     @Autowired(required=false)13     private TestObject testObject;14     15     @Override16     public void save() {17         System.out.println("UserRepository save...");18         System.out.println(testObject);19     }20 21 }

UserJdbcRepository.java

 1 package com.yl.annotation.repository; 2  3 import org.springframework.stereotype.Repository; 4  5 @Repository 6 public class UserJdbcRepository implements UserRepository { 7  8     @Override 9     public void save() {10         System.out.println("UserJdbcRepository save...");11     }12 13 }

UserService.java

 1 package com.yl.annotation.service; 2  3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.beans.factory.annotation.Qualifier; 5 import org.springframework.stereotype.Service; 6  7 import com.yl.annotation.repository.UserRepository; 8  9 @Service10 public class UserService {11     @Autowired12     @Qualifier("userJdbcRepository")13     private UserRepository userRepository;14     15     /*@Autowired16     @Qualifier("userJdbcRepository")17     public void setUserRepository(UserRepository userRepository) {18         this.userRepository = userRepository;19     }*/20     21     public void add() {22         System.out.println("UserService add...");23         userRepository.save();24     }25 }

UserController.java

 1 package com.yl.annotation.controller; 2  3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.stereotype.Controller; 5  6 import com.yl.annotation.service.UserService; 7  8 @Controller 9 public class UserController {10     @Autowired11     private UserService userService;12     13     public void execute() {14         System.out.println("UserController execute...");15         userService.add();16     }17 }

beans-annotation.xml

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4     xmlns:context="http://www.springframework.org/schema/context" 5     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 6         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> 7  8     <!-- 指定Spring IOC容器掃描的包 --> 9     <!-- 可以通過resource-pattern指定掃描的資源 -->10     <!-- <context:component-scan 11         base-package="com.yl.annotation"12         resource-pattern="repository/*.class"></context:component-scan> -->13     14     <!-- context:exclude-filter 子節點指定排除哪些指定表達式的組件 -->    15     <!-- context:include-filter 子節點指定包含哪些指定表達式的組件, 該子節點需要use-default-filters配合使用 -->    16     <context:component-scan 17         base-package="com.yl.annotation" >18         <!-- use-default-filters="false"> -->19         <!-- <context:exclude-filter type="annotation" 20             expression="org.springframework.stereotype.Repository"/> -->21         22         <!-- <context:include-filter type="annotation" 23             expression="org.springframework.stereotype.Repository"/> -->24             25         <!-- <context:exclude-filter type="assignable" 26             expression="com.yl.annotation.repository.UserRepository"/> -->27         28         <!-- <context:include-filter type="annotation" 29             expression="com.yl.annotation.repository.UserRepository"/> -->30     </context:component-scan>31 </beans>

使用@Resource或@Inject自動裝配bean  Spring還支持@Resource和@Inject注解,這兩個注解和@Autowired注解的功用類似  @Resource注解要求提供一個bean名稱的屬性,若該屬性為空,則自動采用標注處的變量或方法名作為bean的名稱  @Inject和@Autowired注解一樣也是按類型注入的bean,但是沒有required屬性  建議使用@Autowired注解


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: SHOW| 同江市| 紫金县| 随州市| 乡宁县| 吉安县| 贞丰县| 包头市| 西藏| 晋州市| 赞皇县| 清远市| 宝丰县| 稻城县| 孝昌县| 亳州市| 新民市| 连州市| 腾冲县| 寿阳县| 庆云县| 北川| 江北区| 宁海县| 昆明市| 临猗县| 诸城市| 清徐县| 乌兰浩特市| 吕梁市| 濉溪县| 平谷区| 荆门市| 四会市| 新宾| 白水县| 常宁市| 河池市| 新兴县| 潜山县| 托克托县|