spring框架的两大核心:IOC和AOP

烂漫一生 提交于 2021-01-22 06:46:37

Spring简介

  spring框架是一个用于一站式构建企业级应用程序的轻量级解决方案。但spring框架是通过模块化的方式构成,允许我们只使用需要的部分。spring框架的两大核心:IOC与AOP。

 

Spring框架的搭建方式

1.导入相关的jar包

  maven方式下只需要引入spring-context就可以导入相关的jar包

2.编写spring核心配置文件applicationContext.xml

3.编写测试类,实例化容器

通过new ClassPathXmlApplicationContext方法

 

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

 

然后通过实例化容器的gerBean()方法来获取实例

Test bean = context.getBean(Test.class);

spring两大核心之IOC

IOC就是控制反转,不是一种编程方法,而是一种编程思想。就是把对象的创建过程交给spring ioc容器去管理

Spring IoC容器管理一个或多个bean。这些bean是使用您提供给容器的配置元数据创建的(例如,以XML <bean/>定义的形式 )。

 

Bean的初始化方式有三种

1.实例化工厂

2.静态工厂

3.构造方法

 

DI:就是依赖注入,在IOC容器创建对象的时候,初始化内部属性,来定义它们的依赖关系

DI存在两个主要方法:1.set方法注入,2.构造方法注入

 

自动装配:简化xml配置
byName:根据"set" + 属性名首字母大写去查找对应的set方法,如果找到了,则调用该方法来注入
byType:根据set方法中的类型来匹配的。
constructor:根据构造方法来实现自动装配
autowire-candidate="false" 表示该bean不参数自动装配

在开发中我们也可以用注解的方式代替.xml文件的配置

1.@Component取代<bean class="">
@Component("id") 取代 <bean id="" class="">


2.web开发,提供3个@Component注解衍生注解(功能一样)取代
@Repository :dao层
@Service:service层
@Controller:web层


3.依赖注入,给私有字段设值,也可以给setter方法设值

普通值:@Value(" ")
引用值:
方式1:按照【类型】注入
@Autowired


方式2:按照【名称】注入1
@Autowired
@Qualifier("名称")


方式3:按照【名称】注入2
@Resource("名称")
4.作用域
@Scope("prototype") 多例 !

AOP

AOP是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

Spring AOP是用纯Java实现的。不需要特殊的编译过程。Spring AOP不需要控制类加载器层次结构,因此适合在servlet容器或应用程序服务器中使用。

 

使用Java配置启用@AspectJ支持

要使用基于XML的配置启用@AspectJ支持,请使用该aop:aspectj-autoproxy 元素,如以下示例所示:

<aop:aspectj-autoproxy/>

 

启用@AspectJ支持后,在应用程序上下文中定义的任何bean都具有@AspectJ方面的类(具有@Aspect注释),S​​pring会自动检测并用于配置Spring AOP。

 

配置spring

<!-- 面向切面编程 -->
        <aop:config>
            <!-- 切面 -->
            <aop:aspect id="" ref="">
                <!-- 切入点  代码块要切入到什么地方 -->
                <aop:pointcut expression="execution()" id="animalPointCut"/>
            <!-- 通知 before:在XXX之前 -->
            <aop:before method="start" pointcut-ref="animalPointCut"/>
                        <!-- 通知 after:在XXX之后 -->
                <aop:after method="end" pointcut-ref="animalPointCut"/>
                         <!-- 通知 around:在XXX周围环绕 -->
                <aop:around method="around" pointcut-ref="animalPointCut"/> -->

            </aop:aspect>
        </aop:config>

可以用注释代替.xml文件的配置

@Before代替 <aop:before>

@After代替<aop:after>

@Around代替<aop:around>

使用@Around注释声明around建议advice方法的第一个参数必须是type ProceedingJoinPoint在建议的主体内,调用导致底层方法执行proceed()ProceedingJoinPoint原因。proceed方法也可以传入Object[]数组中的值在进行时用作方法执行的参数。

访问当前 JoinPoint

任何通知方法都可以声明一个类型的参数作为其第一个参数 org.aspectj.lang.JoinPoint(注意,需要在通知周围声明类型的第一个参数ProceedingJoinPoint,它是一个子类JoinPoint。 JoinPoint接口提供了许多有用的方法:

  • getArgs():返回方法参数。

  • getThis():返回代理对象。

  • getTarget():返回目标对象。

  • getSignature():返回正在建议的方法的描述。

  • toString():打印建议方法的有用说明。

 

AOP代理

Spring AOP默认使用AOP代理的标准JDK动态代理。这使得任何接口(或接口集)都可以被代理。

 

直接在对象引用上调用该方法

 

当客户端代码具有的引用是代理时,事情会稍微改变。

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!