参考博客: https://blog.csdn.net/qq_22583741/article/details/79589910

1.Spring框架是什么,为什么,怎么用

1.1 Spring框架是一种为了解决企业应用开发的复杂性而创建的开源框架. 其主要优势是分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架.Spring的核心是控制反转(IOC)和面向切面(AOP). 简单来说,Spring是一个分层的JavaSE/EE 一站式轻量级开源框架.

1.2 Spring是一个轻量级开源框架,它可以将简单的组件配置组合成为一个复杂的应用,它可以嵌合其它框架来组成一个完整有效的开发框架.

1.3 Spring的核心是IOC和AOP.  IOC代表着松耦合, 它使得一个对象需要其它对象时,不需要自己创建,而是通过Spring获取;  AOP允许了核心业务与其它业务的分离,使得核心业务只需要关注自己需要完成的时,而诸如日志,事务等则交给其它业务,有效地降低了业务逻辑各个部分之间的耦合性.

2. 内容概述

2.1 applicationContext.xml

这是Spring框架的一个核心文件, 无论是你使用xml进行依赖注入,还是使用注解, 都需要在这个文件中添加相关信息.

 

2.2 IOC

2.2.1 xml配置文件方式

2.2.1.1 属性注入

首先创建一个User对象,设置好你觉得需要的属性,然后将其通过<bean>标签放入配置文件中, 通过<property>标签设置获取到的对象的属性

public class User {
private int id;
private int age;
private String name; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}
    <bean name="user" class="pojo.User">
<property name="name" value="user1"></property>
<property name="age" value="12"></property>
</bean>

然后在主方法中通过ApplicationContext对象从Spring容器获取对象,而不是自己new一个对象. 可以检查获取到的对象是否有配置文件中设置的值.

        String contextfile = "applicationContext.xml";
ApplicationContext context = new ClassPathXmlApplicationContext(contextfile);
User u = (User)context.getBean("user");

2.2.1.2 对象注入

对象注入与属性注入类似, 就是将一个可以从Spring容器中获取的对象,注入到另一个对象中. 比如设置一本书有一个使用者,则获取书的时候,同时需要获取其使用者的对象

public class Book {
private int id;
private String name;
private User user; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
}
}

对应的配置为:

<bean name="book" class="pojo.Book">
<property name="name" value="book1"></property>
<property name="user" ref="user"></property>
</bean>

可以看到这里将value变为ref,指向了前面定义的 bean 中的内容, 因此获取书对象时,Spring也会注入用户对象

2.2.1.3 集合注入

在对象中需要用到集合时,需要用到的集合依赖注入,这里定义两个集合,一个集合里放基本类型,一个集合放对象

package pojo;

import java.util.List;
import java.util.Set; public class Book {
private int id;
private String name;
// private User user;
private Set<String> stringSet;
private List<User> users; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Set<String> getStringSet() {
return stringSet;
} public void setStringSet(Set<String> stringSet) {
this.stringSet = stringSet;
} public List<User> getUsers() {
return users;
} public void setUsers(List<User> users) {
this.users = users;
} // public User getUser() {
// return user;
// } // public void setUser(User user) {
// this.user = user;
// }
}

在applicationContext.xml中的配置为:

    <bean name="book" class="pojo.Book">
<property name="name" value="book1"></property>
<property name="stringSet">
<set>
<value>啦啦啦</value>
<value>312</value>
<value>啦1啦</value>
<value>啦2啦</value>
</set>
</property>
<property name="users">
<list>
<ref bean="user"/>
<ref bean="user"/>
<ref bean="user"/>
<ref bean="user"/>
</list>
</property>
</bean>

在获取到book对象时,就可以从中得到注入的集合

2.2.2 注解方式

当你觉得使用xml文件太麻烦需要来回切换时,可以使用注解来简便快捷地进行依赖注入. 简单的属性注入注解主要用到@Component,@Autowired以及@Resource

@Component("book")
public class Book {
private int id;
private String name;
@Resource(name = "user")
//或者是@Autowired
private User user; //...setter,getter
}
@Component("user")
public class User {
private int id;
private int age;
private String name;
//setter,getter
}

但是需要在applicationContext.xml中添加几行信息,让Spring来扫描包进行注入

    <context:annotation-config/>
<context:component-scan base-package="pojo"/>

2.3 AOP

2.3.1 xml方式

首先定义一个核心业务类, 做你需要做的事

public class BookService {

    public void addBook(Book book) {
System.out.println("do something");
}
}

再定义一个切面类,用于对你需要的业务逻辑进行切面操作.  这里的joinPoint.proceed()可以看做是在进行业务类中的方法

public class BookAspect { 

    public Object log(ProceedingJoinPoint joinPoint) throws Throwable {
//在目标业务进行前要做的东西
System.out.println("start"); //目标业务进行时
Object object = joinPoint.proceed(); //目标业务进行后的操作
System.out.println("end "); return object;
}
}

然后在applicationContext.xml文件中定义两个bean,并将两个方法"关联"起来,这样切面类中的方法就可以作用到业务类的方法中

 <!-- Service -->
<bean id="bookServiceId" class="service.BookService"></bean> <!-- Aspect -->
<bean id="bookAspectId" class="aspect.BookAspect"/> <!-- Aop -->
<aop:config>
<aop:pointcut id="bookCutpoint"
expression="execution(* service.BookService.*(..))"/>
<aop:aspect id="logAspect" ref="bookAspectId">
<aop:around pointcut-ref="bookCutpoint" method="log"/>
</aop:aspect>
</aop:config>

2.3.2  注解方式

首先使用@Component注解,配置BookService类

@Component("bookService")
public class BookService { public void addBook(Book book) {
System.out.println("do something");
}
}

然后用@Aspect等注解,配置BookAspect类

@Aspect
@Component
public class BookAspect { @Around(value = "execution(* service.BookService.*(..))")
public Object log(ProceedingJoinPoint joinPoint) throws Throwable {
//在目标业务进行前要做的东西
System.out.println("start"); //目标业务进行时
Object object = joinPoint.proceed(); //目标业务进行后的操作
System.out.println("end "); return object;
}
}

在applicationContext.xml中添加扫描业务类包和切面类包的信息,自动代理.  将两个类结合起来

<context:component-scan base-package="aspect"/>
<context:component-scan base-package="service"/>
<aop:aspectj-autoproxy/>

Spring框架-IOC和AOP简单总结的更多相关文章

  1. Spring框架IOC和AOP介绍

    说明:本文部分内容参考其他优秀博客后结合自己实战例子改编如下 Spring框架是个轻量级的Java EE框架.所谓轻量级,是指不依赖于容器就能运行的.Struts.Hibernate也是轻量级的. 轻 ...

  2. Spring框架IOC和AOP的实现原理(概念)

    IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控.控制权由应用代码中 ...

  3. Spring框架IOC和AOP的实现原理

    IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控.控制权由应用代码中 ...

  4. Spring框架-IOC和AOP

    IOC:它并不是一种技术实现,而是一种设计思想.在任何一个有实际开发意义的程序项目中,我们会使用很多类来描述它们特有的功能,并且通过类与类之间的相互协作来完成特定的业务逻辑.这个时候,每个类都需要负责 ...

  5. Spring框架IOC容器和AOP解析 非常 有用

    Spring框架IOC容器和AOP解析   主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面 ...

  6. 简单理解Spring之IOC和AOP及代码示例

    Spring是一个开源框架,主要实现两件事,IOC(控制反转)和AOP(面向切面编程). IOC 控制反转,也可以称为依赖倒置. 所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B, ...

  7. Spring的IOC和AOP之深剖

    今天,既然讲到了Spring 的IOC和AOP,我们就必须要知道 Spring主要是两件事: 1.开发Bean:2.配置Bean.对于Spring框架来说,它要做的,就是根据配置文件来创建bean实例 ...

  8. spring的IOC和AOP

     spring的IOC和AOP 1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是 ...

  9. Spring 的IOC和AOP总结

    Spring 的IOC和AOP IOC 1.IOC 许多应用都是通过彼此间的相互合作来实现业务逻辑的,如类A要调用类B的方法,以前我们都是在类A中,通过自身new一个类B,然后在调用类B的方法,现在我 ...

随机推荐

  1. 升级:DNAtools for Excel工具箱,2.x英文版- VBA代码破解工具

    原始出处:www.cnblogs.com/Charltsing/p/DnaTools.html QQ:564955427 DNA工具箱全部功能一览:    单元格焦点指示(支持Excel 2007~2 ...

  2. OSI七层模型的每一层都有哪些协议

    TCP/IP: 数据链路层:ARP,RARP 网络层: IP,ICMP,IGMP 传输层:TCP ,UDP,UGP 应用层:Telnet,FTP,SMTP,SNMP. OSI: 物理层:EIA/TIA ...

  3. 核主成分分析方法(KPCA)怎么理解?

    先回顾下主成分分析方法.PCA的最大方差推导的结论是,把数据投影到特征向量的方向后,方差具有极大值的.假如先把数据映射到一个新的特征空间,再做PCA会怎样?对于一些数据,方差会更好地保留下来.而核方法 ...

  4. Linux centos ssh

    创建m01.backup.nfs.web01.web02 m01(172.16.1.61).backup(172.16.1.41).nfs(172.16.1.31).web01(172.16.1.7) ...

  5. QQ浏览器、火狐浏览器中页面有点大的问题记录

    做页面时候,发现火狐和腾讯QQ浏览器有个问题,就是会将页面显示的比较大,像点了缩放比例120%似的,事实上缩放比例是100%,很奇怪. 甚至面对这个问题,连腾讯公司主页也会放大,也让我很困惑. 比如: ...

  6. C# 使用CsvHelper读取.csv文件

    1,先到包管理器下载 安装CsvHelper. 2,创建一个与csv文件字段名称相同的类 public class SurveyInfoModel { public string DIST_CD { ...

  7. Vue中的状态管理器 - Vuex

    我们知道vue是组件式开发的,当你的项目越来越大后,每个组件背后的数据也会变得越来越难以理顺, 这个时候你就可以考虑使用vuex了. 备注: 官方建议小项目不要使用,引入vuex会带来新的概念和模式, ...

  8. Mac打开Terminal报错-bash : : command not found

    问题描述: Mac系统在打开Terminal的时候,报错-bash : : command not found. 问题分析: 报错并不影响Terminal的使用,于是忽略不计.但是在修改.bash_p ...

  9. 关于TVWALL 通过AS300获取状态连接失败

    昨天晚会突然之间频繁出现tvwall视频软件,断开AS300管理软件的故障 发现AS300当中的cms服务进程,占用内存250M左右,一般情况下估计就是50M左右,增长了不少 无奈之下,只有重启AS3 ...

  10. 树莓派3B+(一)

    第一步:安装raspbian系统 介绍:Raspbian是为树莓派设计,基于Debian的操作系统,由一个小团队开发.其不隶属于树莓派基金会,但被列为官方支持的操作系统. 下载地址:https://w ...