Spring框架-IOC和AOP简单总结
参考博客: 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简单总结的更多相关文章
- Spring框架IOC和AOP介绍
说明:本文部分内容参考其他优秀博客后结合自己实战例子改编如下 Spring框架是个轻量级的Java EE框架.所谓轻量级,是指不依赖于容器就能运行的.Struts.Hibernate也是轻量级的. 轻 ...
- Spring框架IOC和AOP的实现原理(概念)
IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控.控制权由应用代码中 ...
- Spring框架IOC和AOP的实现原理
IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控.控制权由应用代码中 ...
- Spring框架-IOC和AOP
IOC:它并不是一种技术实现,而是一种设计思想.在任何一个有实际开发意义的程序项目中,我们会使用很多类来描述它们特有的功能,并且通过类与类之间的相互协作来完成特定的业务逻辑.这个时候,每个类都需要负责 ...
- Spring框架IOC容器和AOP解析 非常 有用
Spring框架IOC容器和AOP解析 主要分析点: 一.Spring开源框架的简介 二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面 ...
- 简单理解Spring之IOC和AOP及代码示例
Spring是一个开源框架,主要实现两件事,IOC(控制反转)和AOP(面向切面编程). IOC 控制反转,也可以称为依赖倒置. 所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B, ...
- Spring的IOC和AOP之深剖
今天,既然讲到了Spring 的IOC和AOP,我们就必须要知道 Spring主要是两件事: 1.开发Bean:2.配置Bean.对于Spring框架来说,它要做的,就是根据配置文件来创建bean实例 ...
- spring的IOC和AOP
spring的IOC和AOP 1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是 ...
- Spring 的IOC和AOP总结
Spring 的IOC和AOP IOC 1.IOC 许多应用都是通过彼此间的相互合作来实现业务逻辑的,如类A要调用类B的方法,以前我们都是在类A中,通过自身new一个类B,然后在调用类B的方法,现在我 ...
随机推荐
- Linux基本操作
1. ctr + alt + t 打开新的终端窗口2. ctr + shift + + 终端窗口字体放大3. ctr + - 终端窗口字体缩小4. ls : 查看目录下的文件信息5. pwd: 查看目 ...
- UltraEdit文本行数多变一和一边多
一.UltraEdit文本行数多行转换成一行 1.文本样式内容 1.qwertyuuiopqwertyuuiopqwertyuuiopqwertyuuiopqwertyuuiopqwertyuuiop ...
- url全部信息打印
public String findAllContract(HttpServletRequest request,String a){ String string = new StringBuilde ...
- Python链表的实现与使用(单向链表与双向链表)
参考[易百教程]用Python实现链表及其功能 """ python链表的基本操作:节点.链表.增删改查 """ import sys cl ...
- Servlet 易错点和注意点
目录 @WebServlet("/")与@WebServlet("/*")的区别 @WebServlet("/")与@WebServlet( ...
- ansible 模块
1. #vim /etc/ansible/yaml/back.yml - hosts: siyi tasks: - name: "yum rsync" yum: name=rsyn ...
- 小程序组件中有bindinput监听报异常
真机上有问题,ide上是没问题的, 组件有处理函数,结果异常说页面没有处理函数,加上处理函数后就不报异常了.
- java gusnum
package guss; import java.util.Scanner; public class gussnum { String myin; int y; public int gussnu ...
- ubuntu 安装 evpp
ubuntu 安装 evpp 来源 https://www.cnblogs.com/wisdomyzw/p/9402440.html Ubuntu虚拟机安装开源库evpp说明: EVPP为奇虎360基 ...
- MSSQL-最佳实践-Always Encrypted
摘要 在SQL Server安全系列专题月报分享中,往期我们已经陆续分享了:如何使用对称密钥实现SQL Server列加密技术.使用非对称密钥实现SQL Server列加密.使用混合密钥实现SQL S ...