一、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实例的类型

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="
5 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
6
7 <bean id="stu" class="cn.happy.entity.Student">
8 <property name="name" value="呵呵"></property>
9 <property name="age" value="13"></property>
10
11 </bean>
12
13 </beans>

--进行测试Test

通过ClassPathXmlApplicationContext实例化Spring的上下文,并通过ApplicationContext的getBean()方法,根据id来获取Bean实例。ApplicationContext是一个接口,负责读取Spring配置文件,管理对象的加载,生成,维护Bean对象与Bean对象之间的依赖关系,负责Bean的生命周期。ClassPathXmlApplicationContext是ApplicationContext接口的实现类,用于从classpath路径中读取spring配置文件。

1 public class Test01 {
2 @Test
3 public void addTest(){
4 ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
5 Student stus=(Student) ctx.getBean("stu");
6 System.out.println(stus);
7
8 }

输出结果:


四、依赖注入[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

1 public class SpringTest {
2 @Test
3 public void test1(){
4 ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
5 Print pri=(Print) ctx.getBean("printer");
6 pri.print();
7 }

输出结果:


五、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基础的更多相关文章

  1. Spring基础知识

    Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...

  2. spring基础整理

    spring基础教程:https://www.tutorialspoint.com/spring/spring_overview.htm 注入实例 <bean id="" c ...

  3. Spring 基础知识

    Spring架构简单描述 原文:https://www.shiyanlou.com/courses/document/212 Spring 概述 1. Spring 是什么 Spring是一个开源的轻 ...

  4. Spring基础配置

    从毕业到现在我一直从事Android开发,但是对JavaEE一直念念不忘,毕业校招的时候,一个礼拜拿了三个offer,岗位分别是Android.JavaEE和JavaSE,后来觉得Android比较简 ...

  5. Spring基础系列--AOP织入逻辑跟踪

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9619910.html 其实在之前的源码解读里面,关于织入的部分并没有说清楚,那些前置.后 ...

  6. 第65节:Java后端的学习之Spring基础

    Java后端的学习之Spring基础 如果要学习spring,那么什么是框架,spring又是什么呢?学习spring中的ioc和bean,以及aop,IOC,Bean,AOP,(配置,注解,api) ...

  7. Spring基础系列-AOP源码分析

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9560803.html 一.概述 Spring的两大特性:IOC和AOP. AOP是面向切 ...

  8. Spring基础系列-Spring事务不生效的问题与循环依赖问题

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9476550.html 一.提出问题 不知道你是否遇到过这样的情况,在ssm框架中开发we ...

  9. Spring Boot实战(1) Spring基础

    1. Spring基础配置 Spring框架本身有四大原则: 1) 使用POJO进行轻量级和最小侵入式开发 2) 通过依赖注入和基于接口编程实现松耦合 3) 通过AOP和默认习惯进行声明式编程 4) ...

  10. spring基础学习01

    spring基础 Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用 IOC控制反转 把创建对象和维护对象之间的关系权利 ...

随机推荐

  1. Java内存模型深度解析:总结--转

    原文地址:http://www.codeceo.com/article/java-memory-7.html 处理器内存模型 顺序一致性内存模型是一个理论参考模型,JMM和处理器内存模型在设计时通常会 ...

  2. Hibernate(1)——数据访问层的架构模式

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 数据库的概念.逻辑.数据模型概念 应用程序的分层体系结构发展 MVC设计模式与四层结构的对应关系 持久层的设 ...

  3. 你真的会玩SQL吗?让人晕头转向的三值逻辑

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  4. 学习EF之贪懒加载和延迟加载(2)

    通过昨天对EF贪婪加载和延迟加载的学习,不难发现,延迟加载还是很好用的,但是问题也就来了,有的时候我们只需要加载一个实体,不需要和他相关的外部实体,这时候我们来看看EF延迟加载时怎么作用的吧 打开pr ...

  5. 02 button的练习

    private void button1_Click(object sender, EventArgs e) { MessageBox.Show("我也喜欢你!"); //if ( ...

  6. bzoj1854--并查集

    这题有一种神奇的并查集做法. 将每种属性作为一个点,每种装备作为一条边,则可以得到如下结论: 1.如果一个有n个点的连通块有n-1条边,则我们可以满足这个连通块的n-1个点. 2.如果一个有n个点的连 ...

  7. openresty 前端开发序

    还记得第一次尝试前后端分离的时候,是使用nginx + react 构建的spa应用,后端是java,主要处理业务逻辑逻辑部分,返回json数据,在nginx里面配置好html + js纯静态文件,再 ...

  8. 用C#从数据库动态生成AdminLTE菜单的一种方法

    当前的应用设计风格趋于Flat扁平化,很多基于BootStrap实现了很多UI非常漂亮的管理界面(Bootstrap admin template). 此核心文件开源在Github:https://g ...

  9. 简单实用angular.js购物车功能

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. SharePoint 2016 配置向导报错 - The 'ListInternal' attribute is not allowed

    前言 配置SharePoint 2016的配置向导中,第三步创建配置数据库报错,然后百度.谷歌了一下,都没有解决,自己看日志搞定,也许会有人遇到类似问题,分享一下. 1.配置向导的错误截图,如下图: ...