谈谈自己对Spring中IOC和AOP的理解

Spring框架的核心思想主要是IOC和AOP的思想

IOC

IOC概念

所谓IOC即 Inversion Of Control----控制反转。那么是什么意思呢?举个例子,平常在我们的程序中,我们需要通过我们的程序,实例化一个对象,然后利用这个对象进行一系列后续操作,但是,在Spring的框架中,我们可以不用通过程序实例化一个对象,只需要通过配置即可创建类对象,并且由Spring在运行阶段实例化对象、组装对象即可。

Spring中的IOC

Spring中的IOC表现在业务逻辑层(service层),在spring框架中,类对象的创建是交由spring进行管理的。具体步骤如下(举例)
    1.我们需要创建一个实体类(User)
      我们需要编写实体类代码:

public class User {
    private String userName;
    private String userPwd;
    //一些基本的set方法在此就省略了
    @Override
    public String toString() {
        return "This is a user object.";
    }
}

    2.创建Spring的配置文件,在此配置文件下进行Bean注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 配置service 
        <bean> 配置需要创建的对象
            id :用于之后从spring容器获得实例时使用的
            class :需要创建实例的全限定类名
    -->
    <bean id="bean的id(可自己随便取,一般都与实体类相同user)" class="注入bean的实体类的类路径名如(com.XXX.XXX.User)">
    &nbsp;&nbsp;&nbsp;&nbsp;可以在这段代码中属性注入如(username和pwd等)
    </bean>    
</beans>

此时,我们就已经在spring容器中注入了我们User类的bean了,可以在代码中获得容器内User的实例对象了,下面第三步非必要性,即举例使用User的bean,此外,bean是一个强大的标签,里面有很多知识点,在此就不做多介绍了,大家就自行了解吧。
    3.编写测试类进行测试

public class TestIoc {
    @Test
    public void runUser() {
        // 1. 加载Spring配置文件,根据创建对象
        ApplicationContext context = new ClassPathXmlApplicationContext("你的配置文件名,如(applicationContext.xml)");
        // 2. 得到配置创建的对象
        User user = (User) context.getBean("前面配置文件中的bean的id");
        System.out.println(user);
        user.add();
    }
}

至此,一个简单的IOC案例完成,在这个案例中,我们将一般程序实体类的实例化步骤省略了,将其交给实例化等管理控制操作交给了spring框架,我们只需要编写配置文件,即可调用相应的方法等。以上就是spring中的IOC控制反转的思想了。

AOP

AOP概念

百度百科的解释

在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP(面向对象编程)的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。-------------这是笔者从百度百科上拿过来的,比较官方性的解释,接下来谈谈我自己的理解吧!

个人理解

个人认为,AOP的出现是为了满足程序的可扩充性,即降低耦合性,什么意思呢?举个例子,比如我们的一个软件,随着业务的增加,需要增加某种功能,那这个时候,传统的方法思想就要改变很多基础的代码(即纵向修改),这是一个很大而又繁琐的工程量;如果应用AOP思想就能很好的解决这个问题。

AOP思想

AOP思想就是横向切入,什么意思呢?就是在我们需要的增加功能的逻辑代码块中,横向切入我们的功能模块,既不改变我们原来的代码也不用动用底层的基础实现,我们只需要指定一个切入点,切入我们的代码块,在编译时横向植入代码。
原理图(来源于网上)如下所示:
在这里插入图片描述
以上就是AOP和IOC的基本思想了,仅限笔者的个人理解,可能有理解错误的地方,还望指出!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面试高级开发的期间整理的面试题目,记录我面试遇到过的spring题目以及答案 目录 spring ThreadLocal的底层对象; 为什么@Service和@Repository放到实现类上面而不是接口类上面; spring 三种注入(就是从spring容器将bean放入对象属性值Spring下描述依赖关系@Resource, @Autowired和@Inject的区别与联系 SpringBeanFactory和ApplicationContext的区别 谈谈Spring IOC理解,原理与实现? bean的生命周期,详细看上面 SpringBoot自动装配的过程的原理: spring的缓存; spring是如何解决的循环依赖; BeanFactory和FactoryBean有什么区别; Spring用到的设计模式; SPI 机制(Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制), 很多地方有用到: AOP SpringAOP的底层实现原理; 为什么jdk动态代理是必须是接口 两种动态代理的区别 AOP实现方式:aop注解或者xml配置;后来工具jar包aspects; aop的属性 事务 事务编码方式: 事务注意事项; 为什么同一个类A调用b方法事务,A方法一定要有事务(编码式的不用) @transaction多个数据源事务怎么指定数据源 传播特性有几种?7种; 某一个事务嵌套另一个事务的时候怎么办? REQUIRED_NEW和REQUIRED区别 Spring的事务是如何回滚的,实现原理; 抽象类和接口的区别,什么时候用抽象类什么时候用接口; StringBuilder和StringBuffer的区别 java值传递和引用传递

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值