spring注解版开发
暮霭层层楚天阔
Made in the nineties
-- 好读书,每有会意,便欣然忘食
展开
-
通过Spring Resource接口获取资源
通过Spring Resource接口获取资源https://www.iteye.com/blog/elim-2016305原创 2022-02-04 19:26:42 · 512 阅读 · 0 评论 -
39.扩展原理
beanPostProcessor:bean后置处理器,bean创建对象初始化前后进行拦截工作的原创 2021-05-22 15:51:43 · 199 阅读 · 0 评论 -
声明式事务源码分析
1)、组合注解@EnableTransactionManagement 利用TransactionManagementConfigurationSelector给容器导入了两个组件 AutoProxyRegistrar、ProxyTransactionManagementConfiguration2)、AutoProxyRegistrar: 注册了一个InfrastructureAdvisorAutoProxyCreator的组件: 那InfrastructureAdvisorAu原创 2021-02-21 16:17:02 · 88 阅读 · 0 评论 -
AOP-原理总结
**1)、首先是利用@EnableAspectJAutoProxy 开启Aop功能;那怎样开启呢?****2)、首先@EnableAspectJAtutoProxy组合注解用@Import会给容器中注册一个名为internalAutoProxyCreator的组件,其类型是 AnnotationAwareAspectJAutoProxyCreateor****3)、看AnnotationAwareAspectJAutoProxyCreateor的继承树会发现其实现了smartInstantiationA原创 2021-01-09 17:22:45 · 194 阅读 · 1 评论 -
2.aop原理:@EnableAspectJAutoProxy
@EnableAspectJAutoProxyaop的注解版从@EnableAspectJAutoProxy注解开始的,这个组件功能是什么如果我们学习新功能我们就看是否有@Enable注解,有的话是否有注册什么组件,组件的功能是什么核心原理:【看给容器中注册了什么组件,这个组件什么时候工作】1.使用@Import自定义导出组件类的方式,利用AspectJAutoProxyRegistrar自定义给容器中注册beaninternalAutoProxyCreator=》那就添加AnnotationAw原创 2020-12-26 23:05:36 · 273 阅读 · 0 评论 -
1.AOP-AOP功能实现
AOP:【动态代理】指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式;1、导入aop模块;Spring AOP:(spring-aspects)2、定义一个业务逻辑类(MathCalculator);在业务逻辑运行的时候将日志进行打印(方法之前、方法运行结束、方法出现异常,xxx)3、定义一个日志切面类(LogAspects):切面类里面的方法需要动态感知MathCalculator.div运行到哪里然后执行;通知方法:前置通知(@Before):logStart:在目标原创 2020-12-17 21:15:40 · 608 阅读 · 0 评论 -
自动装配-@Profile根据环境注册bean
Profile:Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能;开发环境、测试环境、生产环境;数据源:(/A)(/B)(/C);@Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件1)、加了环境标识的bean,只有这个环境被激活的时候才能注册到容器中。默认是default环境2)、写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能开始生效3)、没有标注环境标识的bean在,任何环境下都是加载的;* 指原创 2020-12-15 21:00:48 · 137 阅读 · 0 评论 -
10.自动装配-Aware注入Spring底层组件&原理
自定义组件想要使用Spring容器底层的一些组件(ApplicationContext,BeanFactory,xxx);自定义组件实现xxxAware;在创建对象的时候,会调用接口规定的方法注入相关组件;Aware;把Spring底层一些组件注入到自定义的Bean中;xxxAware:功能使用xxxProcessor;ApplicationContextAware==》ApplicationContextAwareProcessor;个人理解:1.ApplicationContextAware原创 2020-12-15 20:07:54 · 117 阅读 · 0 评论 -
9.自动装配-@Resource&@Inject
1、Spring还支持使用@Resource(JSR250)和@Inject(JSR330)[java规范的注解] @Resource: 可以和@Autowired一样实现自动装配功能;默认是按照组件名称进行装配的; 没有能支持@Primary功能没有支持@Autowired(reqiured=false); @Inject: 需要导入javax.inject的包,和Autowired的功能一样。没有required=false的功能; @Auto.原创 2020-12-12 17:36:33 · 149 阅读 · 0 评论 -
8.自动装配-Autowired- @Qualifier-@Primary-@Resource-@Inject
总结: 自动装配; Spring利用依赖注入(DI),完成对IOC容器中中各个组件的依赖关系赋值; 1)、@Autowired:自动注入 1)、默认优先按照类型去容器中找对应的组件:applicationContext.getBean(BookDao.class);找到就赋值 2)、如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找 applicationContext.getBean("bookDaoooo"), 属性的名称指的就是 @Autowi原创 2020-12-12 16:47:39 · 96 阅读 · 0 评论 -
7.属性赋值-加载外部配置文件以及环境变量取属性值
总结:1.@PropertySource 注解内部 @Repeatable(PropertySources.class) :可重用注解意味着可以加载多个配置文件2.属性赋值 开发中通常使用@Value注解3.配置文件中的k/v默认都保存到运行的环境变量中;加载完外部的配置文件以后使用${}取出配置文件的值可以使用applicationContext.getEnvironment().getProperty("")获取public class Person { //使用@Value赋值;原创 2020-12-12 15:37:19 · 1250 阅读 · 1 评论 -
6.生命周期-指定初始化和销毁方法的三种方法,以及初始化前后处理器
一种是@bean指定初始化销毁方法,还有实现initializingBean初始化逻辑,DisposableBean 定义销毁逻辑接口还有 JSR250 注解@PostConstruct @PreDistory,1.初始化方式:@Bean 指定init方法,initializingBean定义初始化逻辑,以及@PostConstruct 这些初始化方法都是在Bean创建完成,属性赋值完成后调用的2.在初始化方法前后呢可以通过实现 BeanPostProcessor接口来拦截请求添加自己的逻辑,包装一原创 2020-12-10 21:54:58 · 238 阅读 · 0 评论 -
4.组件注册-@Import-快速导入组件
给IOC容器中注册组件的方式有1、包扫描+组件标注注解(@Controller/@Service/@Repository/@Component)[但是局限于自己写的类]2、Bean [导入的第三方包里面的组件,如果组件没有标注这些注解,但是我们还想加在容器中可以使用]3.@Import[快速给容器中导入一个组件]3.1、@Import(要导入到容器中的组件);容器中就会自动注册这个组件,id默认是全类名3.2、ImportSelector:返回需要导入的组件的全类名数组;3.3、ImportBe原创 2020-11-15 21:40:30 · 310 阅读 · 0 评论 -
5.组件注册-@Conditional-按照条件注册bean
了解过springBoot自动配置原理的同学,应该知道@Conditional注解在底层应用很广总结:@Conditional({Condition}) : 按照一定的条件进行判断,满足条件给容器中注册beanpublic class MainConfig2020 { @Bean("bill") public Person person01(){ return new Person("Bill Gates",62); } @Bean("linus") public Person pers原创 2020-11-15 18:52:44 · 110 阅读 · 0 评论 -
3.组件注册-@Lazy-bean懒加载
总结单实例bean:默认在容器启动的时候创建对象;懒加载:容器启动不创建对象。第一次使用(获取)Bean创建对象,并初始化;不加@Lazy测试发现:1.单例bean默认在容器启动的时候创建并初始化添加到IOC容器,然后每次调用都从容器中取2.打印了System.out.println(“给容器中添加Person…”); @Bean("person") public Person person(){ System.out.println("给容器中添加Person...."); retu原创 2020-11-14 22:48:10 · 173 阅读 · 0 评论 -
2.组件注册-@Scope-设置组件作用域
1.IOC容器中添加组件默认都是单实例的,所以无论获取多少次都是容器启动时new Person(“张三”, 25);这个对象public class MainConfig2020 { @Bean("person") public Person person(){ //1.容器启动时就被调用创建了对象 System.out.println("给容器中添加Person...."); return new Person("张三", 25); }}测试会发现 :1.容器启动时就被调用创建原创 2020-11-14 22:01:44 · 119 阅读 · 0 评论 -
1.组件注册-@ComponentScan-1.自动扫描组件 2.指定扫描规则 3.自定义TypeFilter指定过滤规则
包扫描、只要标注了@Controller、@Service、@Repository,@Component这些注解任何一个都会自动被加入到容器中 <!--xml配置需要配置 <context:component-scan base-package="com.atguigu" use-default-filters="false"></context:component-scan> --> <bean id="personddd" class="com.atgui原创 2020-11-08 18:09:13 · 230 阅读 · 4 评论