Spring基础[IOC/DI、AOP]
一、Spring作用:管理项目中各种业务Bean(service类、Dao类、Action类),实例化类,属性赋值
二、Spring IOC(Inversion of Control )控制反转,也被称为依赖注入(Dependency Injection[DI]),是面向对象编程 中的一种设计理念,用来减轻程序代码之间的耦合度。
IOC原理:侧重原理
在业务代码中不使用我们之间司空见惯的关键字new来构建一个业务实例,而是在配置文件中。通过xml节点来告知容器如何对内存中构建的对应类型的对象名称做命名。
DI依赖注入:侧重实现
说的是创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现。
两者关系:它们是spring核心思想的不同方面的描述。
三、Spring第一个案例[无需new关键字,创建Student对象]
具体步骤:
①创建Student实体类
②在src下创建applicationContext.xml配置文件
③ 测试类
---引入核心jar包:[Beans、Core、Context、Expression]

---创建实体类Student 可植入相应的属性值

---在src下编写Spring配置文件
头文件查找位置:源码

applicationContext.xml:
注:在spring配置文件中,使用<bean>元素来定义Bean实例(也可称为组件)。有两个常用属性:一个是id,表示定义的Bean实例的名称,另一个是Class,表示定义的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"> <bean id="stu" class="cn.happy.entity.Student">
<property name="name" value="呵呵"></property>
<property name="age" value=""></property> </bean> </beans>
--进行测试Test
通过ClassPathXmlApplicationContext实例化Spring的上下文,并通过ApplicationContext的getBean()方法,根据id来获取Bean实例。ApplicationContext是一个接口,负责读取Spring配置文件,管理对象的加载,生成,维护Bean对象与Bean对象之间的依赖关系,负责Bean的生命周期。ClassPathXmlApplicationContext是ApplicationContext接口的实现类,用于从classpath路径中读取spring配置文件。
public class Test01 {
@Test
public void addTest(){
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
Student stus=(Student) ctx.getBean("stu");
System.out.println(stus);
}
输出结果:

四、依赖注入[DI]
通过不同的纸张和不同类型墨盒的组合,来装配出一台打印机。
具体步骤:
①分层创建墨盒和纸张接口
②实现类
③在配置文件中装配
--在ink包下创建Ink接口和其实现类
ink接口:
public interface Ink {
public String getColor();
}
实现类:
public class ColorInk implements Ink{
public String getColor() {
return "彩色墨盒";
}
}
public class BlackInk implements Ink{
public String getColor() {
return "黑色墨盒";
}
}
--在paper包下创建paper接口和其实现类
paper接口:
public interface Paper {
public String getContent();
}
实现类:
public class A4Paper implements Paper{
public String getContent() {
return "我是A4";
}
}
public class B5Paper implements Paper{
public String getContent() {
return "我是B5";
}
}
--在printer包下创建Print类,并植入ink,paper成员变量,称为域属性。封装,以及打印的方法。
public class Print {
private Ink ink;
private Paper paper;
public void print(){
System.out.println("用"+ink.getColor()+"打印"+paper.getContent()+"纸张");
}
--配置文件,并对ink和paper以及打印机进行配置

--测试类。强转的是打印机类print
public class SpringTest {
@Test
public void test1(){
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
Print pri=(Print) ctx.getBean("printer");
pri.print();
}
输出结果:

五、Spring AOP[Aspect Oriented Programming] 面向切面编程
AOP原理:
将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决
采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能
AOP目的:
从系统中分离出切面,独立于业务逻辑实现

如何使用AOP?
具体步骤:
①在项目中添加Spring AOP相关的JAR文件
②编写前置增强和后置增强实现日志功能
③编写Spring文件,对业务方法进行增强处理
④编写代码获取带有增强处理的业务对象
--添加相关jar文件:

--业务类:并实现特定接口,在该方法中并没有实现日志输出功能
ISomeService:

SomeService:

--接下来就以AOP方式为该方法添加日志功能,编写增强类
通过 MethodBeforeAdvice实现前置增强

通过AfterReturningAdvice实现后置增强

--Spring配置文件进行组件声明。
注:头文件需引入对应的aop

--接下来在Spring配置文件中实现Aop配置,首先定义切入点。execution是切入点指示符,它的括号中是一个切入点表达式,可以配置要切入的方法,切入点表达式支持模糊匹配

--测试类

标红注意点:
关于接口的一个问题:
如果一个类实现了一个接口,默认使用的代理是JDK动态代理
如果一个类没有实现任何接口,默认使用的是cglib动态代理
在这里倘若强转的是类SomeService类,则会报如下错误:

实现效果:

Spring基础[IOC/DI、AOP]的更多相关文章
- Spring理解IOC,DI,AOP作用,概念,理解。
IOC控制反转:创建实例对象的控制权从代码转换到Spring容器.实际就是在xml中配置.配置对象 实例化对象时,进行强转为自定义类型.默认返回类型是Object强类型. ApplicationCon ...
- 解释Spring中IOC, DI, AOP
oc就是控制翻转或是依赖注入.通俗的讲就是如果在什么地方需要一个对象,你自己不用去通过new 生成你需要的对象,而是通过spring的bean工厂为你长生这样一个对象.aop就是面向切面的编程.比如说 ...
- Spring学习笔记(一) Spring基础IOC、AOP
1. 注入类型 a) Spring_0300_IOC_Injection_Type b) setter(重要) c) 构造方法(可以忘记) d) ...
- spring的IOC和AOP
spring的IOC和AOP 1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是 ...
- spring的IOC和AOP详细讲解
1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是有这个IOC容器进行产生,同时, ...
- Spring的IOC和AOP之深剖
今天,既然讲到了Spring 的IOC和AOP,我们就必须要知道 Spring主要是两件事: 1.开发Bean:2.配置Bean.对于Spring框架来说,它要做的,就是根据配置文件来创建bean实例 ...
- Spring框架IOC和AOP介绍
说明:本文部分内容参考其他优秀博客后结合自己实战例子改编如下 Spring框架是个轻量级的Java EE框架.所谓轻量级,是指不依赖于容器就能运行的.Struts.Hibernate也是轻量级的. 轻 ...
- Spring 的IOC和AOP总结
Spring 的IOC和AOP IOC 1.IOC 许多应用都是通过彼此间的相互合作来实现业务逻辑的,如类A要调用类B的方法,以前我们都是在类A中,通过自身new一个类B,然后在调用类B的方法,现在我 ...
- Spring中IOC和AOP的详细解释(转)
原文链接:Spring中IOC和AOP的详细解释 我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂 ...
随机推荐
- VMWare 安装 Mac OS X10.10 Yosemite
OS X Yosemite 新功能特性 Mac OS X10.10 GM3|OS X 10.10 Yosemite 正式版下载 如何在虚拟机中安装苹果mac系统图示说明 vm10虚拟机安装Mac OS ...
- java web学习总结(十二) -------------------Session
一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...
- [ASP.NET Core] Getting Started
前言 本篇文章介绍如何快速建立一个ASP.NET Core应用程序,为自己留个纪录也希望能帮助到有需要的开发人员. ASP.NET Core官网 环境 建立一个ASP.NET Core应用程序,首先要 ...
- 聊聊JVM的年轻代
1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的 唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候 ...
- 64位win7+vs2010编译.net3.5以前的版本问题
一般编译会出现 1.“ResGen.exe”已退出,代码为2 问题处理 2.“错误 2 “LC.exe”已退出,代码为 -1. NBGIS.MainGIS” 3.“未能加载文件或程序集“ESRI.Ar ...
- 屌丝giser成长记-研一篇(上)
2011年本科毕业之后,我选择了保研GIS研究生,继续了我的GIS研究生涯,读研的童鞋们注意了,读研选择什么样的导师很重要,因为不同的导师有不同的人脉,从浅一点的来说,导师手头的开发项目多的话,你自己 ...
- 写pdf文件
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- JS代码和OC代码的相互调用
JS调用OC 很多应用里面或多或少的调用了网页,来达到绚丽的效果,所谓的JS调用OC.....举个例子吧,网页上有个按钮 点击按钮跳转界面,跳转的动作由OC的代码实现. OC调用JS 还是举个例子,我 ...
- 【转】swift实现ios类似微信输入框跟随键盘弹出的效果
swift实现ios类似微信输入框跟随键盘弹出的效果 为什么要做这个效果 在聊天app,例如微信中,你会注意到一个效果,就是在你点击输入框时输入框会跟随键盘一起向上弹出,当你点击其他地方时,输入框又会 ...
- Request 和 Response 原理
* Request 和 Response 原理: * request对象和response对象由服务器创建,我们只需要在service方法中使用这两个对象即可 * 继承体系结构: ...