Spring的IOC和AOP

6 篇文章 2 订阅
订阅专栏

IOC

IOC的底层原理:XML解析+工厂模式+反射

public class UserService {
    /**
     * 之前想要在一个类中使用另一个类的实例方法,就必须创建此类的对象,然后调用,
     * 但是这样的话,两个类的耦合度就太高了,如果实现类要换了,
     * 所有类用到了这个实现类的都要改,这里的new UserDao();都得改,
     * 改的话就意味着要重新编译,打包,部署,这样耗费的人力就太多了.
     *
     * 于是spring就站出来,提出一种解决方案:IOC控制反转.
     * spring说不要将对象定死了,就是不要程序员自己创建对象了,程序员只需要声明即可,
     * 对象由spring创建,然后放在容器中供我们使用.
     */
//    private UserDao userDao = new UserDaoImpl(); 不要自己创建对象

    @Autowired
    private UserDao userDao;// 只需声明即可,这样代码就不用修改了

    public int addUser(){

        int add = userDao.add();
        return add;
    }
}
    <!--交给spring创建对象-->
    <!--这样要更换实现类,只需在这里改就够了-->
    <bean id="userDao" class="com.lin.ioc.dao.impl.UserDaoImpl"/>

spring容器中bean的生命周期

1、首先就是bean实例化,调用bean的无参或有参构造器创建对象。

2、调用setter方法给bean对象的属性赋值,如果第一步是调用有参的构造器创建对象,这步就没有。

3、spring调用Aware接口中的方法,凡是实现了Aware接口的类,都会执行接口中的方法

/**
 * User bean
 *
 * BeanFactory, ApplicationContext等对象是spring容器的内置对象,不是程序员定义的。
 * 如果想要在一个bean中使用这些对象的话,可以在bean中声明想要的容器内置对象:private ApplicationContext applicationContext;
 *
 * 然后实现xxxAware接口,实现接口的方法,这样在bean初始化的时候,spring会调用xxxAware接口的setXXX(XXX xxx),将你想要对象作为方法的对象传过来,
 * 然后你就可以用这个对象了。
 *
 * @author shkstart
 * @create 2022-09-05 11:33
 */
public class User implements ApplicationContextAware {

    // 在一个bean中想要用ApplicationContext对象,
    private ApplicationContext applicationContext;

    // applicationContext对象spring调用这个方法的时候会传过来
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("2、Aware接口的setApplicationContext()给User对象的applicationContext属性赋值...");

        this.applicationContext = applicationContext;
    }

}

 

4、bean初始化前置处理:spring调用BeanPostProcessor接口中的postProcessBeforeInitialization(Object bean, String beanName)

bean就是你的bean对象,beanName是你的bean对象的name,这是你就可以对你的bean对象做任何操作,这个阶段是为了给你的bean一些扩展处理。

如果你想对你的bean对象在初始化前做一些自定义的处理,就可以实现BeanPostProcessor接口,并实现postProcessBeforeInitialization(Object bean, String beanName)方法。

5、执行InitializingBean接口中的afterPropertiesSet()方法

看方法名是在属性设置完后,就是在bean对象属性设置完之后由spring调用,和上面那个初始化前置处理区别就只是,这个方法没有参数,不能对bean对象做处理,只能做一些额外的逻辑处理。想要用,bean类要实现InitializingBean接口。

6、执行程序员自定义的初始化方法。

    // 自定义初始化方法
    @PostConstruct
    public void initUser(){
        System.out.println("User对象初始化时,执行...");
    }

7、 bean初始化后置处理:执行BeanPostProcessor接口中的postProcessAfterInitialization(Object bean, String beanName)方法。

如果你想对你的bean对象在初始化后做一些自定义的处理,就可以实现BeanPostProcessor接口,并实现postProcessAfterInitialization(Object bean, String beanName)方法。

8、经过上面的3~7的bean初始化,这个时候bean就可以使用了,使用完了如果容器关闭,就进入bean销毁阶段。

        1)bean销毁前置处理:执行DestructionAwareBeanPostProcessor接口中的postProcessBeforeDestruction(Object bean, String beanName)方法,如果想要在bean销毁前对bean对象做一些处理,可以实现这个接口。

        2)执行自定义的销毁方法,不想在销毁前对bean对象做处理,只是做一些额外的业务处理,可以自定义销毁方法,不带参数。

    // 自定义销毁回调方法
    @PreDestroy
    public void destroyUser(){
        System.out.println("容器关闭,User对象销毁前...");
    }

2024最新首发,全网最全 Spring Boot 学习宝典(附思维导图)
**My Coding Family**
04-20 8万+
从0到1以知识点+实例+项目的教学模式对SpringBoot框架由浅入深进行学习,快来跟bug菌一起学习吧。
Spring IOCaop的原理及实例详解
08-25
主要介绍了Spring IOCaop的原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
SpringIOCAOP原理设计模式
01-27
在接触Spring的过程中,听到最多的无非两个名词,一个是控制反转一个是依赖注入。实际这是一个意思,控制反转代表原来由程序本身去控制对象之间的依赖关系的这种格局被反转了,通过第三方容器(IOC)去完成控制这些...
学习spring iocaop
05-14
spring 核心功能演示项目 1. applicationContext xml方式和注解方式配置 2. pring bean循环依赖。 3. spring bean 启动顺序。 4. BeanDefinition编程式注入到容器。...5. spring aop 打印 6. spring 事务
spring iocaop原理流程图(详细)
08-27
spring ioc容器初始化流程图 spring ioc容器依赖注入流程图 spring aop实现原理流程图
Spring IOCAOP代码与笔记整理
12-07
彻底学会SpringIOCAOP——理论+实操,参考:https://blog.csdn.net/qq_39735940/article/details/121754987
spring iocaop讲解项目demo
05-09
通过项目实例详细讲解springIOCAOP思想,通俗易懂的项目demo
springiocspring aop
09-05
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找...
初学者认识和书写Spring IoCAOP
最新发布
11-19
初学者认识和书写Spring IoCAOP
spring-IocAndAop:SpringIOCAOP
05-10
春天-IocAndAop SpringIOCAOP
Spring核心IoCAOP的理解
08-31
本文主要介绍了Spring核心IoCAOP的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
SpringIOCAOP实现机制模拟
11-11
SpringIOCAOP实现机制模拟,来自与网络。
Spring IOCSpring AOP_spring aop_springIOC
09-24
spring基础Spring IOCSpring AOP的原理及使用
springIOCAOP配置
07-03
springIOCAOP配置
SpringIOCAOP特点
09-15
Spring的核心:IOCAOPIOC是控制反转或依赖注入,AOP是面向切面编程。
以注解方式模拟Spring IoC AOP
09-12
以注解方式模拟Spring IoC AOP,了解Spring是如何实现的.
SpringIoC优点与缺点解析
08-28
主要为大家详细解析了SpringIoC优点与缺点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
springIOCAOP底层原理Demo实现
11-13
实现spring框架中两大思想: 1.ioc 2.aop 分析实现原理自己实现iocaop
helloAop.zip 内含spring ioc,aop例子
01-14
内含spring ioc,aop例子,了解IOCAOP原理
spring iocaop
03-29
Spring IOC(Inversion of Control)和AOP(Aspect-Oriented Programming)是Spring框架的核心特性。 1. Spring IOC(控制反转)是一种设计模式,它将对象的创建和依赖关系的管理从代码中剥离出来,交给容器来管理...

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 数据库中的索引 30527
  • 创建完maven工程后,idea右下角一直显示Downloading Maven Plugins 16544
  • SQL语句执行顺序【全】 10793
  • Vue packages version mismatch报错完美解决 8027
  • SpringBoot项目访问不到static目录的静态资源 6752

分类专栏

  • Java 15篇
  • 人工智能 1篇
  • 开发优化 2篇
  • 网络 1篇
  • 各种安装 1篇
  • 前端 4篇
  • 数据库 8篇
  • 项目管理工具 8篇
  • bug解决 18篇
  • SSM 6篇
  • 分布式微服务 7篇
  • javaweb 4篇
  • docker 4篇
  • 大数据 9篇

最新评论

  • SQL语句执行顺序【全】

    CodeAlpaca: 那union all的顺序是哪个位置呀

  • SQL语句执行顺序【全】

    qq_35510894: 假如中间有开窗函数呢

  • Java随记

    CSDN-Ada助手: 不知道 Java 技能树是否可以帮到你:https://edu.csdn.net/skill/java?utm_source=AI_act_java

  • 数据库中的索引

    躺着听Jay: 那就好

  • 数据库中的索引

    向阳而生_cc: 写的很好,收获很多,赞表情包

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 类文件具有错误的版本 61.0, 应为 52.0
  • Anaconda和Jupyter使用指南
  • WebSocketServer依赖注入问题
2024年6篇
2023年28篇
2022年50篇
2021年5篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

躺着听Jay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳SEO优化公司临夏网站开发报价廊坊网站推广系统十堰网站seo优化推荐宜宾网站排名优化哪家好吕梁百度竞价公司衡阳网络推广公司盐城seo网站优化和县网站搜索优化哪家好大芬网站优化多少钱孝感营销网站公司丹东企业网站建设报价思茅关键词按天计费推荐平顶山百度网站优化排名公司同乐网站优化按天扣费价格桂林建设网站价格果洛至尊标王多少钱同乐模板推广推荐大理网站排名优化多少钱天津网站seo优化多少钱安庆网站改版推荐临猗网站搭建多少钱宜春网络广告推广推荐贵港网站优化按天扣费多少钱常德网络广告推广价格襄樊营销网站多少钱广东网站优化排名哪家好金华模板推广价格嘉兴网站建设推荐衡阳网页设计多少钱吉安百度seo多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化