您的位置:首页 > 编程语言 > Java开发

spring基本配置详解

2017-03-28 23:51 218 查看
Spring注解:

1.准备工作:

1):导入common-annotation.jar包

2):导入schema文件

3):配置web.xml文件

<?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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd" default-default-lazy-init="true">
<!--将针对注解的处理器配置好 -->
<context:annotation-config />
<!-- 使用annotation定义事务-->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
<!--使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入base-package为需要扫描的包(含所有子包)-->
<context:component-scan base-package="com" />
.....
<beans>

注1:<context:component-scan base-package="*.*"/>

该配置隐式注册了多个对注解进行解析的处理器:

AutowiredAnnotationBeanPostProcessor

CommonAnnotationBeanPostProcessor

PersistenceAnnotationBeanPostProcessor  

RequiredAnnotationBeanPostProcessor

其实,注解本身除了和xml一样起到配置作用外,并不做任何事情;主要在于背后强大的处理器,其中就包括了<context:annotation-config/>配置项里的注解所使用的处理器

所以配置了<context:component-scan base-package="*.*"/>就无需再配置<context:annotation-config/>;

注2:在Java中通常使用@Resource和@Autowired进行装配;

它们的区别是:1):@Resource默认按名称装配,找不到是再按类型装配;@Autowired只是按类型装配

2):@Autowired一般装配在set方法上;当Spring上下文不存在或者不止一个所要装配的类型的时候使用@Autowired都会报错,这是可以采用如下对应方法:

当Spring上下文可能不存在时,使用@Autowiredwired(required = false),此时即使找不到也不会报错:
@Autowired(required = false)
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}

当Spring上下文不止一个所要装配的类型时,可以结合@Qualifier使用来指定需要注入Bean的名称:
@Autowired
public void setUserDao(@Qualifier("userDao") UserDao userDao) {
this.userDao = userDao;
}
此时只会注入ID=“userDao”的Bean;同时@Qualifier还可以用在成员变量和构造参数上
public class Boss {
@Autowired
private Car car;
@Autowired
@Qualifier("office")
private Office office;
@Autowired
public Boss(Car car , @Qualifier("office")Office office){
this.car = car;
this.office = office ;
}
}


最后:

@Resource装配顺序

1 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

2 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常

3 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常

4 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型(UserDao)

进行匹配,如果匹配则自动装配;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring
相关文章推荐