12. Bean 获取,作用域,管理
- Bean 获取,作用域,管理
在IOC容器中,每一个Bean都有一个属于自己的名字,可以通过注解的value属性指定bean的名字。如
果没有指定,默认为类名首字母小写。
1.问题:使用前面学习的四个注解声明的bean,一定会生效吗?
答案:不一定。(原因:bean想要生效,还需要被组件扫描)
@SpringBootApplication 中默认扫描的范围是SpringBoot启动类所在包及其子包
使用四大注解声明的bean,要想生效,还需要被组件扫描注解@ComponentScan({"dao","com.alex"})扫描指定包路径的类
2.面试题 : @Autowird 与 @Resource的区别
@Autowired 是spring框架提供的注解,而@Resource是JDK提供的注解
@Autowired 默认是按照类型注入,而@Resource是按照名称注入
当存在多个相同类型的Bean注入时,加上@Primary注解,来确定默认的实现
public class EmpController {
// @Autowired
@Resource(name="empServiceA") //@Resource(name="empServiceB")
private EmpService empService;
默认情况下,spring项目启动时,会把bean都创建好放在IOC容器中,如何想主动获取这些bean,可以通过如下方式获取:getBean()
@Autowired
private ApplicationContext applicationContext;//IOC容器对象
类名 lei=(类名)applicationContext.getBean("类名");
@Singleton bean默认是单列的,在容器启动时被创建,可以使用@Lazy注解延迟初始化
@Scope("prototype")
---------------------------------声明第三方bean,获取bean-------------------------------
在类上添加@Component 注解来注入IOC容器,但是对应引入的第三方包不能修改怎么注入呢?用@Bean
@SpringBootApplication
public class SpringbootAopQuickstartApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootAopQuickstartApplication.class, args);
}
//声明第三方bean
@Bean //将方法返回值交给IOC容器管理,成为IOC容器的bean对象(第3方包)
public SAXReader saxReader(){
return new Saxreader();
}
}
---------------------------------声明第三方bean,获取bean-------------------------------
@Configuration
public class CommonConfig {
//声明第三方bean
@Bean //将方法返回值交给IOC容器管理,成为IOC容器的bean对象(第3方包)
public SAXReader saxReader(){ //saxReader 方法名是bean对象
return new Saxreader();
}
}
@Test
public void testGetBean(){
Object saxReader=applicationContext.getBean("reader");
System.out.println(saxReader);
}
注解注入IOC容器:
@Component
@Controller
@Service
@Repository
分类:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2021-06-24 .net 5 源码 解读
2021-06-24 编程哪些事儿?从普通开发到架构师,补齐短板