看看Spring如何簡化Spring XML配置

 本文內容主要介紹了Bean的自動裝配、基於註解的配置和基於Java類的配置對XML配置的簡化。java

自動裝配Bean的屬性

當Spring裝配Bean的屬性時,若是很是明確,則可使用自動裝配模式:程序員

自動裝配類型

手動:使用ref裝配 策略:面試

  • byName 假設屬性的名字和bean的名字相同
    <bean   autowire="byName"/>
    <bean  />
  • byType 只容許存在一個bean符合類型相同
    <bean   autowire="byType"/>
    <bean  />
    能夠設置primary,默認true
    <bean   autowire="byType"/>
    <bean   primary="false"/>
    忽略某些候選類
    <bean   autowire="byType"/>
    <bean   autowire-candidate="false"/>
  • constructor 構造器注入,匹配構造器的入參類型:
    <bean   autowire="constructor"/>
    <bean   />
  • autodetect 最佳自動裝配,首先嚐試使用constructor,而後是byType
    <bean   autowire="autodetect"/>
    <bean   />

默認自動裝配

在根元素上配置default-autowire類型spring

<beans default-autowire="byType">

混合裝配

能夠顯式裝配和自動裝配同時使用數據庫

基於註解的配置

註解配置示例

@Component是Spring容器中的基本註解,表示容器中的組件(bean),能夠做用在任何層次:express

@Component("userDao")
public class UserDao{}

等效於編程

<bean  />

可用做定義Bean的註解

  • @Component用於DAO實現類標註
  • @Service用於service實現類進行標註
  • @Controller用於controller實現類進行標註
  • @Repository

加載註解配置

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 自定義

經常使用註解詳解

Bean定義註解

@Scope("prototype")做用域配置

  • @Repository 將拋出的數據訪問異常封裝爲spring的數據訪問異常

    • 使用@Repository將DAO類聲明爲Bean
      @Repository
      public class UserDAO{...}
    • 配置註解掃描包
  • @Component:泛化的概念

  • @Service

  • @Controller

Bean的生命週期

生命週期回調

  • 實現Spring提供的兩個接口:InitializingBean和DisposableBean

  • 在XML文件中使用的init-method和destroy-method

    <bean  
    	init-method="init" destory-method="destory"/>
  • JSR-250

    • @PostConstruct:初始化以後執行的回調方法
    • @PreDestory:銷燬以前執行的回調方法
    • 配置文件示例說明: <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配置文件:

基於Java類的配置示例

  1. @Configuration註解須要做爲配置的類
  2. @Bean註解相應的方法
  3. AnnotationConfigApplicationContext或子類進行加載

配置類示例:

@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="")

結合使用java方式和xml

基於java方法的配置類中引入基於xml方式的配置文件

配置文件:

<bean  >
	<constructor-arg index="0" value="test"/>
</bean>
@Configration("ctxConfig")
@ImportResource("classpath:com/jike/***/appCtx.xml","")
public class ApplicationContextConfig{
	......
}

在xml中引入基於java的配置

開註解掃描

<context:annotation-config/>
<bean  />

啓動Spring容器

  • 經過構造函數加載配置類
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的配置:

  • 第三方類庫,如DataSource,JdbcTemplate等
  • 命名空間:如aop、context等

基於註解的配置:

  • Bean的實現類是當前項目開發的,可直接在Java類中使用註解配置

基於Java類的配置:

  • 對於實例化Bean的邏輯比較複雜,則比較適用於基於Java類配置的方式

 最後

對於程序員來講,要學習的知識內容、技術有太多太多,要想不被環境淘汰就只有不斷提高本身,歷來都是咱們去適應環境,而不是環境來適應咱們!

不用多說,相信你們都有一個共識:不管什麼行業,最牛逼的人確定是站在金字塔端的人。因此,想作一個牛逼的程序員,那麼就要讓本身站的更高,成爲技術大牛並非一朝一夕的事情,須要時間的沉澱和技術的積累。

如今競爭這麼激烈,只有經過不斷學習,提升本身,才能保持競爭力。

對於一些不知道學習什麼,沒有一個系統路線的程序員,這裏給你們提供一些學習資料

須要的小夥伴,能夠一鍵三連,點擊這裏獲取免費領取方式

《Java核心知識點合集(283頁)》

內容涵蓋:Java基礎、JVM、高併發、多線程、分佈式、設計模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、數據庫、雲計算等 watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

《Java中高級核心知識點合集(524頁)》

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

《Java高級架構知識點整理》

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

《Docker從入門到實踐》

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

《spring could 學習筆記》

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

《JVM與性能調優知識點整理》

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

《MySQL性能調優與架構設計解析文檔》305頁

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

《Nginx入門到實戰》319頁

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

《Java併發編程》385頁

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

《1000道 互聯網Java工程師面試題 (485頁)》

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

須要的小夥伴,能夠一鍵三連,點擊這裏獲取免費領取方式 

相關文章
相關標籤/搜索