参考链接:

HOW2J.CN:Spring

idea创建一个spring项目

一、IDEA创建Spring项目

创建方法:idea创建一个spring项目

maven管理项目,生成项目结构如下:



在main文件夹下新建Resources目录,并且将此目录设置为资源文件夹,在此文件夹下创建文件applicationContext.xml





然后在pom.xml中添加spring的依赖:

  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-context</artifactId>
  4. <version>5.1.5.RELEASE</version>
  5. </dependency>

到这里Spring的基本配置弄完了。

二、Spring: IOC和DI

IOC:反转控制,将对象创建的过程交给Spring

DI:依赖注入,拿到的对象,属性可以被注入了相关值,直接可以使用。

我觉得how2j的站长对于spring的IOC的比喻非常好:

传统方式:相当于你自己去菜市场new 了一只鸡,不过是生鸡,要自己拔毛,去内脏,再上花椒,酱油,烤制,经过各种工序之后,才可以食用。

用 IOC:相当于去馆子(Spring)点了一只鸡,交到你手上的时候,已经五味俱全,你就只管吃就行了。

接下来我们来看看我们如何直接去Spring“餐馆”点一只做好的鸡(对象),以下为写配置文件实现,还可以使用注解实现,注解方法不在此展示

  1. 创建一个Student类和一个Book类

  1. public class Book {
  2. private String name;
  3. private double money;
  4. public String getName() {
  5. return name;
  6. }
  7. public void setName(String name) {
  8. this.name = name;
  9. }
  10. public double getMoney() {
  11. return money;
  12. }
  13. public void setMoney(double money) {
  14. this.money = money;
  15. }
  16. }
  1. public class Student {
  2. private String name;
  3. private Book book;
  4. public Book getBook() {
  5. return book;
  6. }
  7. public void setBook(Book book) {
  8. this.book = book;
  9. }
  10. public String getName() {
  11. return name;
  12. }
  13. public void setName(String name) {
  14. this.name = name;
  15. }
  16. }
  1. 在applicationContext.xml中编写关于Student类和Book类的配置:

下面这段代码的意思是通过Spring拿到Student对象时,Spring会注入属性name和book,并且name被赋值为张三,book被赋予名字语文,好比你直接拿到了一个姓名为张三,带着语文书的Student对象

  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="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5. <bean name="Student" class="whu.xsy.spring.po.Student">
  6. <property name="name" value="张三"></property>
  7. <property name="book" ref="Book"></property>
  8. </bean>
  9. <bean name="Book" class="whu.xsy.spring.po.Book">
  10. <property name="name" value="语文" />
  11. </bean>
  12. </beans>
  1. 获取对象
  1. public class App {
  2. public static void main( String[] args ){
  3. ApplicationContext context = new ClassPathXmlApplicationContext(
  4. new String[] { "applicationContext.xml" });
  5. Student s = (Student)context.getBean("Student");
  6. System.out.println(s.getName());
  7. System.out.println(s.getBook().getName());
  8. }
  9. }

结果如下:

张三

语文

三、Spring: AOP

AOP 即 Aspect Oriented Program 面向切面编程。

在面向切面编程的思想中,把功能分为了核心业务功能和周边功能。

核心业务功能:比如登录、增删改查数据库等逻辑业务功能

周边功能(切面):比如记日志、事务管理等等

在项目中,通常将核心业务功能周边功能分别独立开发,在项目运行时又“交织”在一起进行。这种编程思想就叫AOP

  1. 创建SaleService.java文件,作为学生卖书的逻辑业务类
  1. public class SaleService {
  2. //标价
  3. public void markPrice(){
  4. System.out.println("标价服务");
  5. }
  6. }
  1. 如果每次调用SaleService的对象之前,都要提醒一句话:”当前正在进行交易“,那么每次调用之前,都要写一句(非常麻烦):
  1. System.out.println("当前正在进行交易")

如果使用AOP思想,只需要在applicationContext.xml中配置一下就行。

先在pom.xml中加入如下依赖:

  1. <dependency>
  2. <groupId>org.aspectj</groupId>
  3. <artifactId>aspectjweaver</artifactId>
  4. <version>1.8.9</version>
  5. </dependency>

创建专门的切面类(用于日志提示):

  1. public class LoggerAspect {
  2. public Object log(ProceedingJoinPoint joinPoint) throws Throwable {
  3. System.out.println("start log:" + joinPoint.getSignature().getName());
  4. Object object = joinPoint.proceed();
  5. System.out.println("end log:" + joinPoint.getSignature().getName());
  6. return object;
  7. }
  8. }

编写配置文件:

  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. xmlns:aop="http://www.springframework.org/schema/aop"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/aop
  8. http://www.springframework.org/schema/aop/spring-aop.xsd">
  9. <bean name="Student" class="whu.xsy.spring.po.Student">
  10. <property name="name" value="张三"></property>
  11. <property name="book" ref="Book"></property>
  12. </bean>
  13. <bean name="Book" class="whu.xsy.spring.po.Book">
  14. <property name="name" value="语文" />
  15. </bean>
  16. <bean name="SaleService" class="whu.xsy.spring.service.SaleService">
  17. </bean>
  18. <bean id="loggerAspect" class="whu.xsy.spring.log.LoggerAspect"/>
  19. <aop:config>
  20. <aop:pointcut id="loggerCutpoint"
  21. expression=
  22. "execution(* whu.xsy.spring.service.SaleService.*(..)) "/>
  23. <aop:aspect id="logAspect" ref="loggerAspect">
  24. <aop:around pointcut-ref="loggerCutpoint" method="log"/>
  25. </aop:aspect>
  26. </aop:config>
  27. </beans>
  1. 三次调用SaleService对象
  1. public class App {
  2. public static void main( String[] args ){
  3. ApplicationContext context = new ClassPathXmlApplicationContext(
  4. new String[] { "applicationContext.xml" });
  5. Student s = (Student)context.getBean("Student");
  6. SaleService service = (SaleService)context.getBean("SaleService");
  7. for(int i = 0; i < 3; i++){
  8. service.markPrice();
  9. }
  10. }
  11. }

结果为(每次调用markPrice时,都在前后打印了日志):

start log:markPrice

标价服务

end log:markPrice

start log:markPrice

标价服务

end log:markPrice

start log:markPrice

标价服务

end log:markPrice

Spring框架零基础学习(一):IOC|DI、AOP的更多相关文章

  1. 深入浅出学习Spring框架(四):IoC和AOP的应用——事务配置

    在前文 深入浅出学习Spring框架(一):通过Demo阐述IoC和DI的优势所在. 深入浅出学习Spring框架(三):AOP 详解 分别介绍了Spring的核心功能——IoC和AOP,光讲知识远远 ...

  2. Yaf零基础学习总结2-Yaf框架的安装

    接着上一篇文章<Yaf零基础学习总结1-Yaf框架简介>我们对Yaf框架有那么一个大概的了解了,但是对于程序员来说,那些文字都是表面的,他们最想的就是开始敲代码了.当然这也是学习Yaf框架 ...

  3. 如何从零基础学习VR

    转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...

  4. HTML5零基础学习Web前端需要知道哪些?

    HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...

  5. Yaf零基础学习总结5-Yaf类的自动加载

    Yaf零基础学习总结5-Yaf类的自动加载 框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件. Yaf在自启动的 ...

  6. Yaf零基础学习总结4-Yaf的配置文件

    在上一节的hello yaf当中我们已经接触过了yaf的配置文件了, Yaf和用户共用一个配置空间, 也就是在Yaf_Application初始化时刻给出的配置文件中的配置. 作为区别, Yaf的配置 ...

  7. Yaf零基础学习总结3-Hello Yaf

    Yaf零基础学习总结3-Hello Yaf 上一次我们已经学习了如何安装yaf了,准备工作做好了之后我们来开始实际的编码了,码农都知道一个经典的语句就是“Hello World”了,今天我们开始入手Y ...

  8. [原]零基础学习视频解码之android篇系列文章

    截止今天,<零基础学习视频解码系列文章>.<零基础学习在Android进行SDL开发系列文章>以及<零基础学习视频解码之android篇>系列文章基本算是告一段落了 ...

  9. 译:Spring框架参考文档之IoC容器(未完成)

    6. IoC容器 6.1 Spring IoC容器和bean介绍 这一章节介绍了Spring框架的控制反转(IoC)实现的原理.IoC也被称作依赖注入(DI).It is a process wher ...

随机推荐

  1. WeChair Plus版项目介绍

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 团队名称 WeChair 这个作业要求在哪里 团队作业第一次:团队作业第一次(2) 这个作业的目标 项目介绍,项目修改 作业正文 ...

  2. js中.bind()和.call()用法讲解

    var option = { ti : 8, it(){ return this.ti; } } 这里又一个option对象,it()方法里的this指的就是option对象的上下文. console ...

  3. MQ消息队列(2)—— Java消息服务接口(JMS)

    一.理解JMS   1.什么是JMS?         JMS即Java消息服务(Java Message Service)应用程序接口,API是一个消息服务的标准或者说是规范,允许应用程序组件基于J ...

  4. -手写Spring注解版本&事务传播行为

    视频参考C:\Users\Administrator\Desktop\蚂蚁3期\[www.zxit8.com] 0018-(每特教育&每特学院&蚂蚁课堂)-3期-源码分析-手写Spri ...

  5. max depth exceeded when dereferencing c0-param0问题的解决

    在做项目的时候,用到了dwr,有一次居然报错,错误是 max depth exceeded when dereferencing c0-param0 上网查了一下,我居然传参数的时候传的是object ...

  6. $.post 参数定义

    //重置密码 function ResetPassword(id, accounts) { //alert("重置密码id-" + id + "-" + acc ...

  7. Docker入门——理解Docker的核心概念

    1 前言 相信不少人听过这么一句话: 人类的本质是复读机. 在软件开发领域也一样,我们总是想寻找更好地方式复制优秀的逻辑或系统.最核心的方法是抽取通用逻辑和组件,把差异化的东西接口化或配置化,达到复用 ...

  8. 复盘鼎甲科技2020web开发工程师-笔试题(校招)

    复盘鼎甲科技2020web开发工程师-笔试题(校招) 本试卷以W3C规范为准,JavaScript使用ES5标准,除特别说明外,不考虑各个浏览器之间差异. 一.多项选择题 以下标签是行内元素(inli ...

  9. CSS居中对齐

    CSS实现居中对齐的几种方式 页面布局中,居中对齐是我们经常遇到的场景,现在总结几个常用的方式供大家参考. 场景一:按钮文字居中对齐,line-height + text-align html代码: ...

  10. css3增加的的属性值position:stricky

    position:sticky sticky 英文字面意思是粘,粘贴.这是一个结合了 position:relative 和 position:fixed 两种定位功能于一体的特殊定位,适用于一些特殊 ...