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),此时即使找不到也不会报错:
当Spring上下文不止一个所要装配的类型时,可以结合@Qualifier使用来指定需要注入Bean的名称:
最后:
@Resource装配顺序
1 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
2 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
3 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
4 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型(UserDao)
进行匹配,如果匹配则自动装配;
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)
进行匹配,如果匹配则自动装配;
相关文章推荐
- Java程序员从笨鸟到菜鸟之(七十二)细谈Spring(四)利用注解实现spring基本配置详解
- 重拾Spring之配置bean详解以及AppliactionContext基本功能
- spring基本配置详解(属性bean的基本配置)
- spring之AOP基本概念和配置详解
- Spring Boot + Jpa(Hibernate) 架构基本配置详解
- Java程序员从笨鸟到菜鸟之(七十四)细谈Spring(六)spring之AOP基本概念和配置详解
- Spring自动注入,利用注解实现spring基本配置详解,Spring注解快速入门
- Java程序员从笨鸟到菜鸟之(七十)细谈Spring(三)IOC和spring基本配置详解
- SSH:Spring框架(利用注解实现spring基本配置详解)
- 细谈Spring(六)spring之AOP基本概念和配置详解
- 细谈Spring(六)之AOP基本概念和配置详解
- Spring(四)利用注解实现spring基本配置详解
- Spring 基础教程之四:JavaBean基本配置详解
- Java程序员从笨鸟到菜鸟之(七十四)细谈Spring(六)spring之AOP基本概念和配置详解
- Java程序员从笨鸟到菜鸟之(七十)细谈Spring(三)IOC和spring基本配置详解
- 利用注解实现spring基本配置详解
- 细谈Spring(六)spring之AOP基本概念和配置详解
- pring(三)IOC和spring基本配置详解
- Spring4.X + Spring MVC + Mybatis3 零配置应用开发框架搭建详解 (3) - 实现最基本的登录处理
- Java程序员从笨鸟到菜鸟之(七十二)细谈Spring(四)利用注解实现spring基本配置详解