一、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="13"></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 01基础的更多相关文章

  1. spring boot基础学习教程

    Spring boot 标签(空格分隔): springboot HelloWorld 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新 ...

  2. [Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.

    前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习 ...

  3. [Spring框架]Spring AOP基础入门总结一.

    前言:前面已经有两篇文章讲了Spring IOC/DI 以及 使用xml和注解两种方法开发的案例, 下面就来梳理一下Spring的另一核心AOP. 一, 什么是AOP 在软件业,AOP为Aspect ...

  4. Java 之 I/O 系列 01 ——基础

    Java 之 I/O 系列 目录 Java 之 I/O 系列 01 ——基础 Java 之 I/O 系列 02 ——序列化(一) Java 之 I/O 系列 02 ——序列化(二) 整理<疯狂j ...

  5. spring中基础核心接口总结

    spring中基础核心接口总结理解这几个接口,及其实现类就可以快速了解spring,具体的用法参考其他spring资料 1.BeanFactory最基础最核心的接口重要的实现类有:XmlBeanFac ...

  6. Spring Boot 基础

    Spring Boot 基础 Spring Boot 项目(参考1) 提供了一个类似ASP.NET MVC的默认模板一样的标准样板,直接集成了一系列的组件并使用了默认的配置.使用Spring Boot ...

  7. Spring MVC 基础

    Spring MVC 基础 1.Web MVC基础 MVC的本质是表现层模式,我们以视图模型为中心,将视图和控制器分离出来.就如同分层模式一样,我们以业务逻辑为中心,把表现层和数据访问层代码分离出来是 ...

  8. Spring Boot 基础教程系列学习文档

    Spring Boot基础教程1-Spring Tool Suite工具的安装 Spring Boot基础教程2-RESTfull API简单项目的快速搭建 Spring Boot基础教程3-配置文件 ...

  9. CgLib动态代理学习【Spring AOP基础之一】

    如果不了解JDK中proxy动态代理机制的可以先查看上篇文章的内容:Java动态代理学习[Spring AOP基础之一] 由于Java动态代理Proxy.newProxyInstance()的时候会发 ...

随机推荐

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出

    系列目录 昨天文章太过仓促没有补充导出的示例源码,在者当时弄到到很晚没时间做出导出功能,对阅读理解造成影响,现补充一份示例源码,顺便补充导出的功能说明,望理解 示例代码下载   https://yun ...

  2. python基础操作以及hdfs操作

    目录 前言 基础操作 hdfs操作 总结 一.前言        作为一个全栈工程师,必须要熟练掌握各种语言...HelloWorld.最近就被"逼着"走向了python开发之路, ...

  3. docker对数据卷容器进行备份

    转载请注明出处 官网的数据以及各大博客都没有对这个的具体说明,本人也是理解了好久. 我们使用docker的过程中,使用共享的数据卷是经常的,那么.我们要怎么进行备份呢?   首先,我们得了解下面4个命 ...

  4. React Native环境搭建以及几个基础控件的使用

    之前写了几篇博客,但是没有从最基础的开始写,现在想了想感觉不太合适,所以现在把基础的一些东西给补上,也算是我从零开始学习RN的经验吧! 一.环境搭建 首先声明一下,本人现在用的编辑器是SublimeT ...

  5. C# - 多线程 之 异步编程

    异步编程 同步编程,请求响应模型,同步化.顺序化.事务化. 异步编程,事件驱动模型,以 Fire and Forget 方式实现. 异步编程模式  -§- 异步编程模型 (APM) 模式: IAsyn ...

  6. iOS-多线程介绍

    一.前言部分 最近在面试,重新温习了一遍多线程,希望加深一遍对于多线程的理解. 1.什么是进程? 1).要了解线程我们必须先了解进程,通俗来讲进程就是在系统中运行的一个应用程序. 2).每个线程之间是 ...

  7. 有点激动,WPF换肤搞定了!

    一如既往没废话! wpf桌面应用开发都是window内引入很多个UserControl. 如果你有通过不同颜色来换肤的需求,那么下面我就将整个过程! 分2个步骤: 1.主窗体背景色替换: 2.同时界面 ...

  8. json显示日期带T问题的解决方法

    此问题是由Newtonsoft.Json转换json导致的: Newtonsoft.Json产生的默认日期时间格式为: IsoDateTimeConverter 格式 解决方法: 需要引用下面的命名空 ...

  9. spring笔记5 spring IOC的基础知识1

    1,ioc的概念 Inverse of control ,控制反转,实际的意义是调用类对接口实现类的依赖,反转给第三方的容器管理,从而实现松散耦合: ioc的实现方式有三种,属性注入,构造函数注入,接 ...

  10. C/C++ Memory Layout

    参考 http://www.cnblogs.com/skynet/archive/2011/03/07/1975479.html