Spring框架的自动装配

一.表现机制

当某个变量需要被赋值时,可以使用特定的语法,让Spring尝试从容器中找到合适的值,并自动完成赋值

最典型的表现就是添加@Autowired注解,Spring就会尝试从容器中找到合适的值为这个属性赋值

二.属性装配示例代码

1.先创建一个Spring组件扫描类

@Configuration
@ComponentScan("包名") 
public class SpringConfig { 


}

/*
*此类是配置类,将在启动时被加载
*此类配置了组件扫描,在被加载时将执行扫描
*/

2.创建另一个组件类(用于数据的交互类)

@Repository 
public class UserMapper { 
    public void insert() { 
        System.out.println("UserMapper.insert() >> 将用户数据写入到数据库 中……"); 
        } 
}
/*
*此类是一个组件类
*在组件扫描的包找那个,且添加了组件注解@Repository
*这个注解表示该组件是操作数据的组件
*/

3.创建控制器类

@Controller 
public class UserController { 
    @Autowired // 注意:此处使用了自动装配的注解 
    private UserMapper userMapper;
 
    public void reg() { 
        System.out.println("UserController.reg() >> 控制器即将执行用户注册……");  
        userMapper.insert();                                                     
    } 
}
/*
*userMapper属性并未赋值,但是使用了@Autowired注解
*Spring框架会通过自动装配机制为此属性注入值
*如果注入成功,调用此属性的方法时将成功运行
*否则,就出现NPE
*/

4.创建测试类

public class SpringRunner { 
    public static void main(String[] args) { 
    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class); 
    UserController userController = ac.getBean("userController",UserController.class);
    userController.reg(); ac.close(); 
    } 
}

三.方法自动装配

Spring的自动装配机制还可以用在方法上:

如果一个方法是由Spring框架自动调用的(通常是构造方法或@Bean注解的方法),当这个方法被声明了参数时,Spring框架也会自动的尝试从容器中找到匹配的对象用于调用此方法

对方法的参数自动装配时,如果方法有多个参数,各个参数的先后顺序是不重要的

示例:

1.创建一个配置类

@Configuration 
public class SpringConfig { 
    @Bean 
    public UserMapper userMapper() { 
        return new UserMapper(); 
    }

    @Bean 
    public UserController userController(UserMapper userMapper) { 
        UserController userController = new UserController(); 
        userController.userMapper = userMapper; return userController; 
    } 
}

首先,会根据需要装配的数据类型在Spring容器中统计匹配的Bean(对象)的数量

当匹配的Bean数量为0时,判断@Autowired注解的required属性值,这个属性默认值为true,即装配失败,项目启动时即抛出NoSuchBeanDefinitionException

我们需要将required的属性值设置为false,表示放弃自动装配,不会报告异常,后续直接使用此属性时,会报NPE

当匹配的Bean数量为1个,直接装配,且装配成功

当匹配的Bean数量超过1个,自动尝试按照名称进行装配(属性名要与beanName相同)

四.小结

1.当某个属性需要被注入值,且此值肯定存在于Spring容器中时,可以使用@Autowired注解,那么Spring框架就会自动为此属性注入值

2.如果某个方法是Spring调用的,当方法体中需要某个值,其次值存在于Spring容器中,可以将其声明为方法的参数,那么Spring框架会自动从容器中找到此值并且调用此方法

如果声明了多个参数,那么各参数的先后顺序是不重要的

3.自动装配的前提是Spring会自动创建此类的对象,否则Spring不可能为属性注入值,也不可能调用类中的方法

4.@Autowired的装配机制的表现是可以根据类型实现装配,并且,当匹配类型的Bean有多个时,还可以根据名称匹配,从而实现装配

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值