Spring使用与两大核心(Bean,AOP)
Spring框架
哈哈哈Spring官网的标题直接说明了我们为什么要使用spring。接下来我们看看一下Spring的使用步骤。
Spring入门使用
1.下载Spring依赖
先进入官网
点击进入github
进入后往下来,找到Access to Binaries
Access to Binaries
点击进入找到
找到发行版本
然后依次点击org/、springframework/、spring/、到达以下页面,选择你所需要的版本。
2.导入jar包,我们初期所需要的jar包为以下几个
博主在这里提供一个网盘链接,供大家直接下载。
提取码abcd
3.创建ApplicationContext.xml配置文件
注意下文件必须放在源文件夹,这里给出了3.2版本的头部。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.2.xsd">
Spring轻松使用
spring的核心操作单元是以一个一个的bean为组件进行操作,因此我们需要知道bean是什么以及如何在xml文件中配置一个bean。
bean的定义:在 Spring 中,构成应用程序主干并由Spring IoC容器管理的对象称为bean。bean是一个由Spring IoC容器实例化、组装和管理的对象。
通过这段话我们大概明白了bean是由一个叫ioc容器帮我们创建的对象,不是我们自己创建的,bean由ioc容器实例化和管理。
(博主的个人理解:bean其实就对应着Java里面的对象,我们在Java中通过对象完成各种操作,Spring以封装好的bean给我们提供各种操作。注意:默认获取的bean是单例的。)
然后看看完上面相信你大概对bean有了个了解,但是此时你肯定又会由一个疑问那么ioc是什么东西?
ioc的定义:ioc(Inversion of Control)
控制反转通过依赖注入(DI)方式实现对象之间的松耦合关系。
程序运行时,依赖对象由【辅助程序】动态生成并注入到被依赖对象中,动态绑定两者的使用关系。 Spring
IoC容器就是这样的辅助程序,它负责对象的生成和依赖的注入,让后在交由我们使用。
简而言之,就是:IoC就是一个对象定义其依赖关系而不创建它们的过程。
控制反转一般可以这样理解,假设我们有一个User类(用户类)和一个Candy类(糖果类),用户都拥有自己的糖果。
我们的正常操作是自己手动创建用户对象,然后定义用户对象与某个糖果对象之间的依赖关系。
然后Spring提供的操作是,我们先定义好用户与糖果的依赖关系,然后spring通过ioc容器帮我们创建用户实例。
这就是对ioc的简单理解,我们在定义依赖关系的操作就叫做(DI)。
Spring的使用实例
1.定义Java程序类,程序类中有id,username,sign等对象属性。
public class User {private Integer id;private String username;private String sign;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getSign() {return sign;}public void setSign(String sign) {this.sign = sign;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", sign='" + sign + '\'' +'}';}
}
2.定义dao层
public interface UserDao {public boolean addUser(User user);
}
3.设定实现类
public class UserDaoImpl implements UserDao {@Overridepublic boolean addUser(User user) {System.out.println("-----------数据连接层daoImpl 正在执行-----------");System.out.println("需要添加的对象为"+user);System.out.println("-----------数据添加成功-----------------------");return true;}
}
4.定义service层
public interface UserService {public boolean addUser(User user);
}
5.设置实现类
public class UserServiceImpl implements UserService{UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic boolean addUser(User user) {return userDao.addUser(user);}
}
6.在xml文件中注册bean组件
<bean id="userDao" class="com.openlab.dao.impl.UserDaoImpl"></bean><bean id="userService" class="com.openlab.service.impl.UserServiceImpl"><property name="userDao" ref="userDao"></property></bean>
可以看到,原来我们在userService中需要手动创建dao的实现类,现在我们通过xml文件进行实现类的依赖关系的定义。
7.测试程序
@org.junit.Testpublic void testUserServiceAndAop(){ApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml");UserService service = (UserService) context.getBean("userService");User user = new User();user.setId(1001);user.setUsername("李淳罡");user.setSign("剑来");service.addUser(user);}
8.测试结果
AOP编程
AOP(Aspect-OrientedProgramming)下面以简单的图来看一下Aop到底是什么。
假设上面为我们正常程序的的执行流程,每一个方法的执行可以看为程序执行的一个节点(切入点),现在假设我们有一个需求,需要在执行C方法时加入一些新的代码,正常来说我们可能就需要更改源码,但是我们可以AOP编程,就可以避免更改源码。
面向切面编程通俗的说就是在某个切入点,我们增加新的方法来进行功能的解耦与拓展,使本来只需要执行一个节点方法的位置增加了(织入)许多个节点方法(多个点不就可以认为组成了一个面吗,而且相较于程序执行轴来说,这个些点理论上使增加在同一个时间点上的,所以是切面)。
实际上在Spring中实现AOP编程默认使用的是JDK中的动态代理模式来完成的。通过代理方法,实现增强处理。
AOP编程实例
在上面代码的基础上,我们对保存用户的功能进行拓展,在保存前先进行对象信息的打印(前置增强处理),在保存后打印方法的返回值(后置增强处理)
1.书写日志类(功能拓展)
public class UserLogger {private static final Logger LOGGER = Logger.getLogger(UserLogger.class);public void beforeProcess(JoinPoint joinPoint){System.out.println();System.out.println();System.out.println();System.out.println("---------前置增强服务正在执行------------");System.out.println("切点信息:切点执行方法"+joinPoint.getSignature().getName()+"切点方法所需要的参数+param"+ Arrays.toString(joinPoint.getArgs()));System.out.println("---------前置增强服务执行完毕------------");System.out.println();System.out.println();System.out.println();}public void afterProcess(JoinPoint joinPoint ,Object result){System.out.println();System.out.println();System.out.println();System.out.println("---------后置增强服务正在执行------------");System.out.println("切点信息:切点执行方法"+joinPoint.getSignature().getName()+"切点方法返回值为:"+ result);System.out.println("---------后置增强服务执行完毕------------");System.out.println();System.out.println();System.out.println();}
}
2.将日志类注册为Java组件
<!--配置增强服务类--><bean id="userLogger" class="com.openlab.logger.UserLogger"></bean>
3.AOP配置
- 配置切点
- 配置切面
- 配置增强处理
<!--aop配置--><aop:config><aop:pointcut id="pointcut" expression="execution(* com.openlab.dao.UserDao.addUser(..))" ></aop:pointcut><!--切面配置--><aop:aspect ref="userLogger"><aop:before method="beforeProcess" pointcut-ref="pointcut"></aop:before><aop:after-returning method="afterProcess" pointcut-ref="pointcut" returning="result"></aop:after-returning></aop:aspect></aop:config>
4.测试类
@org.junit.Testpublic void testUserServiceAndAop(){ApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml");UserService service = (UserService) context.getBean("userService");User user = new User();user.setId(1001);user.setUsername("李淳罡");user.setSign("剑来");service.addUser(user);}
测试结果
博主才疏学浅,博文中难免存在错误,希望大家不吝指正!
Spring使用与两大核心(Bean,AOP)相关推荐
- 【JAVAEE框架】浅谈 Spring 框架的两大核心思想 AOP 与 IOP
哈喽~大家好呀,这篇来看看Spring 框架的两大核心思想.
- Spring框架的两大核心思想
Spring框架的两大核心思想 简介:Spring 的主要作用就是为代码"解耦",降低代码间的耦合度.就是让对象和对象(模 块和模块)之间关系不是使用代码关联,而是通过配置来说明. ...
- spring相关:spring介绍与两大核心容器
1.什么是spring? spring是一个开放源码的J2EE容器框架,是针对bean的生命周期进行管理的轻量级容器.容器内放置的都是java对象(java bean),当容器启动时,容器为我们创建对 ...
- Spring框架两大核心特征的基本理解
Spring框架的两大核心特征:AOP和IoC IoC(控制反转)是Spring的一个容器,他不是一种技术,而是一种思想,依旧是基于面向对象编程的.它能指导我们怎么样设计出松耦合.更优良的程序. 简单 ...
- Spring4.x❶ 两大核心之IOC
1 Spring? 2 IOC案例 2.1 配置文件方法 2.2 注解方法 2.3 配置文件与注解一起使用 3 代码案例可参考: 更多Spring开发在框架开发 1 Spring? Spring是开源 ...
- java spring原理详解,spring原理详解,两大核心IOC和AOP
大家好,我是java梦之旅,一个被Bug耽误了才艺的程序员,专注于Java领域的知识分享和技术交流,每天会给大家带来Java学习的干货教程,喜欢我的同学可以关注我,一起学习,一起加油! 1.概念:sp ...
- Java轻量级业务层框架Spring两大核心IOC和AOP原理
IoC(Inversion of Control): IOC的基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务.容器负责将这些 ...
- 游戏行业两大核心问题:数据挖掘与安全
4月19-21日的2016云栖大会深圳峰会,有前沿技术深度分享.Workshop阿里云开放实验室.行业企业聚会.Tech Insight实战干货,更有20+场分论坛,120+高浓度实战演讲,100+阿 ...
- hadoop的两大核心之一:HDFS总结
2019独角兽企业重金招聘Python工程师标准>>> hadoop的两大核心之一 海量数据的存储(HDFS) 什么是HDFS? hadoop distributed file sy ...
最新文章
- 985高校博士情侣致谢:我俩每月补贴600元,在一线城市生活5年
- 马云再谈996,又一次被网友怒骂:马老师,求求你闭嘴吧!
- 局域网与网络工程课堂笔记(1)(2)
- UIPasteboard 粘贴板
- 【Storm篇】--Storm基础概念
- Gym - 101102C
- ITK:查看矢量图像的分量
- 阿里云PolarDB论文入选数据库顶会SIGMOD2021 最新一代架构领先世界
- HTML5 Canvas 绘制六叶草
- [vue] 说说你对v-clock和v-pre指令的理解
- qml: 多级窗口visible现象;
- python复杂非线性方程_python – 如何解决Sympy中的非线性方程?
- python官方文档中文版下载,python官方手册中文pdf
- 2021-01-05
- 使用VSCode运行C语言
- 第23章 向碧蓝的苍穹致敬——三维天空的构建
- 【ES6学习】对象的解构赋值
- 爬取笔趣阁小说网站上的所有小说(二)
- OvR逻辑回归多分类算法
- 怎么建一个新的微信群?微信小技巧
热门文章
- BUUCTF | Misc 二维码 -- BUUOJ WriteUP
- 【ES实战】Elasticsearch指标监控说明
- Realtek RTL8762C/Realtek RTL8762D学习记录
- spring context:property-placeholder无法加载配置文件,导致属性无效
- wifi模块微信小程序AP配网(UDP)
- Apollo自动驾驶之高精地图
- 申请美国计算机科学博士,美国计算机博士申请案例分析
- Java安全(十三) SSM-Spring框架
- ★为什么不要和“穷人”做朋友?
- 【UE·GamePlay篇】攀爬系统系列教程(二)——相邻墙壁飞跃、墙角拐弯、回头反向跳