一.简述
Spring SpringMvc SpringBoot SpringCloud SpringSecurity SpringData
二.特点
1.轻量级
Spring是个轻量级的框架,因为它需要的只是普通的Java对象,只使用spring核心服务,开发难度小,服务开销小。不依赖特定容器或规范。
2.依赖注入DI
spring这个容器中,替你管理着一系列的类,前提是你需要将这些类交给spring容器进行管理,然后在你需要的时候,不是自己去定义,而是直接向spring容器索取,当spring容器知道你的需求之后,就会去它所管理的组件中进行查找,然后直接给你所需要的组件。
1.设值注入
2.构造注入:借助于构造方法(带参数的构造方法,建议写出无参数构造方法),来进行注入
3. P命名空间注入:借助于属性进行对象的初始化、代码相对简洁,往往用于对系统进行初始化...
属性简单类型: p:属性名="值"
属性引用类型: p:属性名-ref="组件ID"
4.不同的数类型注入:
#设值注入和构造注入的比较
设值注入 构造注入
必须提供setter/getter方法 构造方法
时效性比较差 时效性比较优
比较灵活 方法的重载、比较受限
3.控制反转IOC
IOC(Inverse of Control)在编码阶段,既没有实例化对象,也没有设置依赖关系,把调用类的选择控制权交给Spring,由Spring在运行阶段实例化、组装、调用及销毁,因此被称为控制反转。
简单来说:以前的程序,由程序员手动的在程序内部创建对象。在Spring中通过IOC将这一生产对象的控制权交给Spring。反转控制就是反转了对象的创建方式,从我们自己创建反转给了程序创建(spring)。
优点:更好的解耦,松耦合,避免了硬编码,利于程序后期的维护和扩展
注:实现IOC思想需要DI做支持
4.面向切面编程AOP
AOP(Aspect Oriented Programming,面向切面编程)是一种对业务逻辑的各个组件、框架和资源进行隔离,可以通过预编译方式和运行期间动态代理实现在不修改源代码的情况下给应用程序动态统一添加功能的一种技术(系统服务)。降低了业务逻辑各部分之间的耦合度,因此被称为面向切面编程。
概念:主要将散落在系统中的公共的模块代码进行集中式的管理和配置以及应用日志管理、日志打印
AOP增强处理分类:前置增强 后置增强 环绕增强 异常处理增强 最终增强
原理:动态代理原理
增强处理方式步骤:
1.配置增强处理类
2.AOP配置:配置切面、切入点
1.前置,后置增强
<!-- 配置增强处理类的Bean -->
<bean id="userloggin" class="com.openlab.loggin.UserLoggin"></bean>
<!-- 配置AOP -->
<aop:config>
<!-- 配置切入点 -->
<aop:pointcut expression="execution(public * modifyUser(..))" id="pointCut"/>
<!--配置切面 -->
<aop:aspect ref="userloggin">
<!--前置增强 -->
<aop:before method="beforePointLogger" pointcut-ref="pointCut"/>
<!--后置增强 -->
<aop:after-returning method="afterPointLogger" pointcut-ref="pointCut" returning="result"/>
</aop:aspect>
</aop:config>
2.环绕增强
<!-- 配置环绕增强处理类Bean-->
<bean id="arroudBean" class="com.openlab.aop.ArroundLogger"></bean>
<!-- 环绕增强AOP配置 -->
<aop:config>
配置切入点:
<aop:pointcut expression="execution(public * addNewUser(..))" id="pointcut"/>
配置切面:
<aop:aspect ref="arroudBean">
<aop:around method="arroudLogger" pointcut-ref="pointcut"/>
</aop:aspect>
</aop:config>
3.异常处理增强
<!--配置异常处理增强Bean -->
<bean id="errorLogger" class="com.openlab.aop.ErrorLogger"></bean>
<!-- 异常处理增强AOP配置 -->
<aop:config>
<!-- 配置切入点: -->
<aop:pointcut expression="execution(public int addNewUser1(com.openlab.pojo.User))" id="pointcut3" />
<!-- 配置切面: -->
<aop:aspect ref="errorLogger">
<aop:after-throwing method="afterThrowingLogger" pointcut-ref="pointcut3" throwing="e"/>
</aop:aspect>
</aop:config>
4.最终增强
<!--配置最终增强处理类Bean -->
<bean id="afterBean" class="com.openlab.aop.AfterLogger"></bean>
<!-- 环绕增强AOP配置 -->
<aop:config>
<!--配置切入点: -->
<aop:pointcut expression="execution(public * addNewUser1(..))" id="pointcut1"/>
<!--配置切面: -->
<aop:aspect ref="afterBean">
<aop:after method="afterLogger" pointcut-ref="pointcut1"/>
</aop:aspect>
</aop:config> -->
三.Spring项目构建步骤
- 创建Spring工程
- 添加Spring的依赖包
- 创建Spring的配置文件:applicationContext.xml
- 创建问候类
- 配置Spring的配置文件
- 运行测试
四. 注解完成AOP以及依赖注入的使用
注解和XML文件比较
xml配置文件: 影响代码的可阅读性 容易引起错误
注解:清晰、代码非常少、大大的简化代码,减少我们的工作量
一.注解实现AOP:
1 .使用注解注明增强处理类
@Aspect
2. 使用注解注明增强方法以及增强的方式
切入点: @Pointcut("execution(* com.openlab.service.impl.UserServiceImpl.*(..))")
异常处理增强:@AfterThrowing(pointcut="pointCut()",throwing="e")
最终增强: @After("execution(* com.openlab.service.impl.UserServiceImpl.*(..))")
环绕增强: @Around("execution(* com.openlab.service..*.*(..))")
前置增强: @Before("execution(* com.openlab.service.impl.UserServiceImpl.*(..))")
后置增强: @AfterReturning(pointcut="pointcut()",returning="result")
3. 开启AOP的注解支持:
<!-- 开启AOP的切面注解支持 -->
<aop:aspectj-autoproxy />
二. 注解实现依赖注入(自动装配):
自动装配方式:
1.按照类型自动装配(byType)--由Spring提供:
@Autowired
@Qualifier("userDao")---也可使用名称装配2.按照名称自动装配(byName)--由JavaEE提供:
@Resource(name="userDao")