Java架构篇章-01Ioc容器设计理念和核心注解的使用

01Ioc容器设计理念和核心注解的使用

one question— BeanFactoryapplicationContext 的本质区别是什么?

csdn链接↑

1. applicationContext 是 BeanFactory 的一个功能的扩展
2. BeanFory 启动时候不去实例化bean,调用的时候才实例化对象(懒加载). ApplicationContext的启动即实例化bean(非懒加载,但可以指定为懒加载)
Spring容器集成图:

这个图肯定很多人见过了,我们主要看画圈圈的3个地方。这三个是常用且重要的。
请添加图片描述

控制反转和依赖注入

重要思想:依赖倒置原则

ioc的思想最核心的地方在于,资源不由使用资源的双方管理,而由不使用资源的第三方管理,这可以带来很多好处。
第一,资源集中管理,实现资源的可配置和易管理。第二,降低了使用资源双方的依赖程度,也就是我们说的耦合度

示意图解:

你要找小姐姐嘿嘿嘿,你要有钱+房子+车子+活好,只有这样你才能找到小姐姐,但是现在呢你只要有钱并且通过酒店就可以和小姐姐嘿嘿嘿了. 其实这就是ioc的一种思想.更少的条件来使用资源
请添加图片描述

代码转变:

userService{
	UserDao userDao = new UserDao();
}

变成/

userService{
	@AutoWired
	private UserDao userDao;
}
spring ioc容器底层注解使用
1.基于xml的来定义bean信息
<bean id="Person" class="<包名>"></bean>

然后再容器中读取Bean

ClassPathXmlApplicationContext ctx  = new ClassPathXmlApplicationContext("<指定的xml>");
system.out.println(ctx.getBean("Person"))
2.@Bean方式
@Configuration
public class Main{
	@Bean 
	public Person person(){ 
		return new Person(); 
		}
}

注意: 通过@Bean的形式是使用的话, bean的默认名称是方法名,若@Bean(value=“bean的名称”) 那么bean的名称是指定的

AnnotationConfigApplicationContext ctx  = new AnnotationConfigApplicationContext(Main.Class);
system.out.println(ctx.getBean("Person"))
在配置类上写@CompentScan注解来进行包扫描
@Configuration 
@ComponentScan(basePackages = {"<被扫描的对应的包名>"}) 
public class MainConfig { }
1.排除用法 excludeFilters(排除@Controller注解的,<指定的类>)
@ComponentScan(basePackages = {"<被扫描的对应的包名>"},excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION,value = {Controller.class}),
        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,value = {<指定的类名>.class})
})
2.包含用法 includeFilters ,注意,若使用包含的用法,需要把useDefaultFilters属性设置为false**(**true表示扫描全部的)
@ComponentScan(basePackages = {"<被扫描的对应的包名>"},includeFilters = {
        @ComponentScan.Filter(type = FilterType.CUSTOM,value = TulingFilterType.class)
},useDefaultFilters = false)
3.@ComponentScan.Filter

请添加图片描述

Custom 自定义的使用方法:

@ComponentScan(basePackages = {"<指定的包名>"},includeFilters = {
        @ComponentScan.Filter(type = FilterType.CUSTOM,value = TulingFilterType.class)
},useDefaultFilters = false)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值