看看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=

须要的小伙伴,能够一键三连,点击这里获取免费领取方式 

相关文章
相关标签/搜索