自動裝配Bean的屬性本文內容主要介紹了Bean的自動裝配、基於註解的配置和基於Java類的配置對XML配置的簡化。java
當Spring裝配Bean的屬性時,若是很是明確,則可使用自動裝配模式:程序員
手動:使用ref裝配 策略:面試
<bean autowire="byName"/> <bean />
<bean autowire="byType"/> <bean />
<bean autowire="byType"/> <bean primary="false"/>
<bean autowire="byType"/> <bean autowire-candidate="false"/>
<bean autowire="constructor"/> <bean />
<bean autowire="autodetect"/> <bean />
在根元素上配置default-autowire類型spring
<beans default-autowire="byType">
能夠顯式裝配和自動裝配同時使用數據庫
基於註解的配置@Component是Spring容器中的基本註解,表示容器中的組件(bean),能夠做用在任何層次:express
@Component("userDao") public class UserDao{}
等效於編程
<bean />
context命名空間提供了經過掃描類包來加載利用註解定義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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan bese-package="com.xxx.xxx"/> ...... </beans>
過濾方式之resource-pattern多線程
<context:component-scan bese-package="com.xxx.xxx" resoure-pattern="helloImpl/*.class"/>
過濾方式之過濾子元素架構
<context:component-scan bese-package="com.xxx.xxx" resoure-pattern="helloImpl/*.class"> <context:include-filter type="regex" expression="com\.xxx\.*"/> <context:exclude-filter type="aspectj" experssion="com.xxx.*Controller+"/> </context:component-scan>
過濾表達式:
類別 | 實例 | 說明 |
---|---|---|
annotation | com.jike.XxxAnnotation | 符合XxxAnnotation的target class |
assignable | com.jike.XxxService | 指定父class或interface的全名 |
aspcetj | com.jike..*Service+ | Aspectj語法,後綴爲Service或Service的子類 |
regex | Com.jike.Default.* | Regelar Experssion |
custom | com.jike.myx | 自定義 |
@Scope("prototype")做用域配置
@Repository 將拋出的數據訪問異常封裝爲spring的數據訪問異常
@Repository public class UserDAO{...}
@Component:泛化的概念
@Service
@Controller
生命週期回調
實現Spring提供的兩個接口:InitializingBean和DisposableBean
在XML文件中使用的init-method和destroy-method
<bean init-method="init" destory-method="destory"/>
JSR-250
<context:annotation-config/>
@Required註解,只能標註在setter之上。配置:<context:annotation-config/>
@Autowired能夠對成員變量。方法和構造函數進行標註,根據類型進行自動裝配,如需按名稱進行裝配,則須要配合@Qualifier使用,以下:
@Service public class logonService{ @Autowired private LogDao logDao; }
@Service public class logonService{ @Autowired(require=false) private LogDao logDao; }
@Service public class logonService{ @Autowired @Qualifiler("userDao") private LogDao logDao; }
方法入參自動裝配
@Service public class logonService{ @Autowired public void setLogDao(LogDao logDao){ this.logDao = logDao; } @Autowired @Qualifier("userDao") public void setUserDao(UserDao userDao){ this.userDao = userDao; } }
@Service public class logonService{ @Autowired public void setUserDao(@Qualifier("userDao")UserDao userDao){ this.userDao = userDao; } }
集合類自動裝配標註,會將容器中類型匹配的全部Bean都自動注入進來。
基於Java類的配置經過Java類定義Spring配置元數據,且直接消除XML配置文件:
配置類示例:
@Configuration public class ApplicationContextConifg { @Bean public String message() { return "hello"; } } public class ConfiguartionTest { public static void main(String[] args) { AnnotationConfigApplication ctx = new AnnotationConfigApplicationContext(ApplicationContextConfig.class); System.out.println(ctx.getBean("message")); } }
Bean註解格式
@Bean(name={}, autowire=Autowire.No, initMethod="", destoryMethod="")
配置文件:
<bean > <constructor-arg index="0" value="test"/> </bean>
@Configration("ctxConfig") @ImportResource("classpath:com/jike/***/appCtx.xml","") public class ApplicationContextConfig{ ...... }
開註解掃描
<context:annotation-config/> <bean />
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConf.class);
ApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(DaoConfig.class); ctx.register(ServiceConfig.class); ctx.refresh();
@Configuration @Import(DaoConfig.clcass) public class ServiceConfig{}
基於XML的配置:
基於註解的配置:
基於Java類的配置:
對於程序員來講,要學習的知識內容、技術有太多太多,要想不被環境淘汰就只有不斷提高本身,歷來都是咱們去適應環境,而不是環境來適應咱們!
不用多說,相信你們都有一個共識:不管什麼行業,最牛逼的人確定是站在金字塔端的人。因此,想作一個牛逼的程序員,那麼就要讓本身站的更高,成爲技術大牛並非一朝一夕的事情,須要時間的沉澱和技術的積累。
如今競爭這麼激烈,只有經過不斷學習,提升本身,才能保持競爭力。
對於一些不知道學習什麼,沒有一個系統路線的程序員,這裏給你們提供一些學習資料
須要的小夥伴,能夠一鍵三連,點擊這裏獲取免費領取方式!
內容涵蓋:Java基礎、JVM、高併發、多線程、分佈式、設計模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、數據庫、雲計算等
須要的小夥伴,能夠一鍵三連,點擊這裏獲取免費領取方式!