9.@Autowried、@Nullable
10、IOC 操作 Bean 管理(基于注解方式)
<!--开启组件扫描 1 如果扫描多个包,多个包使用逗号隔开 2 扫描包上层目录 --> <context:component-scan base-package="com.leizi"></context:component-scan> <!--开启注解支持--> <context:annotation-config/>
@Autowired
直接在属性上使用即可,也可以在set方法上使用。
使用@Autowired可以不用编写Set方法,前提是这个自动装配的属性在IoC容器中存在,且符合名字byName自动装配。
@Nullable
字段标记了这个注解,说明这个字段可以为null
扩展:
@Autowired(required=false) 如果显示定义了Autowired的required属性为false,说明这个对象可以为null,否则不允许为空
@Autowired(required=false) private Cat cat;
如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解@Autowired完成的时候,我们可以使用@Qualifier(value="xxx")去配置@Autowired的使用,指定一个唯一的bean对象注入
public Class Perple { @Autowired @Qualifier(value="cat1") private Cat cat; }
@Resource注解(java提供的自动装配注解)
public Class People { @Resource(name="cat2") private Cat cat; @Resource private Dog dog; }
小结:
@Resource 和 @Autowired 的区别:
都是用来自动装配的,都可以放在属性字段上
通常情况下@Autowired是通过byType的方法注入的(而且必须要求这个对象存在),可是在多个实现类的时候,byType的方式不再是唯一,而需要通过byName的方式来注入,
而这个name默认就是根据变量名来的。通过@Qualifier注解来指明使用哪一个实现类,实际上也是通过byName的方式实现。到底使用byType还是byName是有优先级的。优先用byType,而后是byName。
@Autowried是Spring2.5定义的自动装配的注解,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 使用 @Autowired的使用来消除 set ,get方法。 @Autowired 标注在方法上表示当前方法的自定义参数从容器中赋值,ioc容器默认赋值时,需要调用无参构造器后,再进行默认赋值,如果当前类只有一个有参的构造器,则@Autwried可以省略,并且该构造器的参数也默认从ioc容器中获取。
@Resource 默认通过byName 的方式实现,如果找不到名字,则通过byType实现,如果两个都找不到的情况下,就报错。
注解@Scope("singleton") 表明范围,例如单例
@component @Scope("singleton") public class User{ }
JavaConfig实现配置:
配置类取代了xml配置文件:
package com.stt.config; import com.stt.pojo.User; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; // 被spring容器托管,注册到容器中,内部也是一个@Component @Configuration // 代表这个一个配置类,相当于applicationContext.xml配置文件 @ComponentScan("com.stt.pojo") // 扫描包 @Import(MyConfig2.class) // 导入其他配置类 public class MyConfig { // 注册一个Bean,相当于xml配置文件中的bean标签 // 这个方法的名字,就相当于bean标签中的id属性 // 这个方法的返回值,就相当于bean标签中的class属性 @Bean public User user(){ return new User(); // 返回要注入的对象 } }
本文来自博客园,作者:Lz_蚂蚱,转载请注明原文链接:https://www.cnblogs.com/leizia/p/14959370.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步