Spring第二天 注解方式注入

新添加一个jar包

 <groupId>org.springframework</groupId>
  <artifactId>spring-aop</artifactId>
	<version>${spring.version}</version>

一、注解对象

在xml文件中   添加  <context:annotation-config />

在类中加入@Component,说明类被spring容器管理,然后添加@Autowired

该注解可以加在set方法上或者直接加载属性上,如果写在setter方法上,就会通过setter方法进行注入,如果写在变量上,就直接通过反射设置变量的值,不经过setter方法。注入时,会从spring容器中,找到一个和这个属性数据类型匹配的实例化对象注入进来,默认使用byType,根据类型匹配。

如果只能找到一个这个数据类型的对象的时候,就直接注入该对象如果找到了多个同一个类型的对象的时候,就会自动更改为byName来进行匹配,根据set方法对应的参数列表的局部变量名来匹配。

private IUserDao userDao;
@Autowired
public void setUserDao(@Qualifier("指定名字")IUserDao userDao){};
会先找符合IUserDao类型的对象有多少,一个的话就直接拿过来
多个的话,就按照setUserDao方法的参数列表的局部变量名来找

而@Qualifier   以指定名字进行匹配  ,当配置了他的时候,会强制使用byName按指定名字匹配。

@Resource默认使用byName的方式,按照名字匹配,可以写在setter方法上也可以写在变量上

先匹配set方法的名字,匹配不上再匹配方法参数列表的名字

如果还是匹配不上就会转换为byType,根据类型匹配

当然我们也可以指定名字

@Resource(name=”userDao”)  

就相当于 Autowired和Qualifier 一起使用

二、注解实例化对象

在xml添加<context:component-scan base-package="com.tledu.springtest" />

base-package是最大的包路径

在需要被实例化的类加@component,默认是以类名首字母小写作为名字进行存储,可以使用@Component(“xxx”) 或者@Component(value=”xxx”)来设置名字

官方对注解进行了如下分类

 三、创建spring配置类取代xml文件

先创建config包

对配置类加@Configuration,获取容器时需要使用AnnotationApplicationContext(配置类.class)。

再添加@ComponentScan("最大的包路径")用于指定 spring 在初始化容器时要扫描的包。

@Bean
作用: 该注解只能写在方法上,表明使用此方法创建一个对象,并且放入 spring 容器。
属性: name:给当前@Bean 注解方法创建的对象指定一个名称(即 bean 的 id)。

@PropertySource

 用于加载.properties 文件中的配置。括号内写包名


 

@value在spring5版本中可以通过${}取配置文件中的值 

实例化IOC容器,之后可以getbean。

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class);

getBean方法的三种方式:

1) 根据bean元素的 id属性获得对象 需要强转类型 , bean的id写错时 会抛出 NoSuchBeanDefinitionException

       User user1 = (User) context.getBean("user");

2.)根据bean元素的 class属性获得对象 要确保同一种类型的bean只能配置一个

        User user2 = context.getBean(User.class);

3.)根据bean元素的 id+class属性 获得对象 要求id和类型一定要匹配正确(推荐使用)

        User user3 = context.getBean("user", User.class);
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值