spring基本配置详解

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 如果同时指定了nametype,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

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

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

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

进行匹配,如果匹配则自动装配;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值