Spring之Bean的装配及注入

spring中bean的装配指:将bean资源加入到IOC容器实例化;

spring中bean的注入指:将IOC中中的实例注入(这里就先不谈是否被代理了)

装配的方式一般分为两种:显示装配跟隐式装配。

显示装配:1.Java Config形式(@Configuration及@Bean)

                  2.基于xml配置的Bean

隐式装配(扫面组件+自动装配):

                 1.基于注解的(比如@ComponentScan和@Component和@Service以及mvc的注解、@MapperScan)

                 2.自动装配主要满足依赖之间的关系,比如@Autowired@Resource

 

注入方式:

   1.set注入(基于xml的)

//set注入,基本数据类型
<bean id="user" class="com.demo.User">
   <property name="sex" value="男"/>
   <property name="age" value="26"/>
<bean>

//引用类型
<bean id="userService" class="com.demo.UserService">
   <property name="user" ref="user"/>
<bean>

//复杂类型
<bean id="userService" class="com.demo.UserService">
   <property name="list">
     <list>
        <value>hhh</value>
        <value>ccc</value>
     </list>
   </property>
<bean>

   基于java config的

@Configuration
public class BeanConfig{
   
//方法名就是bean的id
   @Bean
   public User createUser(){
       User user = new User();
       user.setSex("nan");
       return user;

   }
}

2.构造器注入

<bean id="user" class="com.demo.User">

    <property name="sex" value="男"/>
</bean>


<bean id="userService" class="com.demo.UserService">
    <constructor-arg ref="user">
    <constructor-arg index="x" type="x">  
    //index用来区别构造函数有多个参数时的位置
    //type用来描述参数类型
</bean>



public class User{

   private String sex;
   
   
   public void setSex(String sex){
      this.sex = sex;

   }

}

public class UserService{

   private User user;

   public UserService(User user){

    this.user = user;
}

}

基于java config的

@Configuration 
public class BeanConfig{

  
  @Bean
  public User create(){

      User user = new User(new XXX);
      return user;
  }

3.属性注入(严格来讲set注入,构造器注入也算属性注入的一种)

@Component
public class User{

  @Value("123")
  private String name;


  public String getName(){
  
    return name;
  }

}

4.自动注入(@ComponentScan+@Autowired)

其实为啥说他自动,因为他不需要设置属性值,且通过组件扫描实现注入

@Service
public class UserServiceImp{

    @Autowired(required=false)
    private UserService service;


....

}



 

基于自动注入的自动装配类型总共有五种:   (相当于筛选IOC容器里符合条件的Bean实例)

1.no     表示不做处理,不使用自动装配功能

2.byName 将属性名跟组件名称符合匹配的注入进来

3.byType  将 属性类型跟组件类型匹配,若查询不到则为null,若查询的对象不止一个则以byName匹配,匹配不到也为null

4.constructor: 与byType类似是根据类型进行自动装配,但是要求待装配的bean有相应的构造函数

5.autodetect:利用Spring的自省机制判断使用byType或是constructor装配

 

@Autowired默认byType   @Resource(不是spring的注解,但spring支持)默认是byName

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值