自动装配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、数据库、云计算等
须要的小伙伴,能够一键三连,点击这里获取免费领取方式!