spring4学习记录01-初识spring

来源:互联网 发布:2017淘宝买家秀男大jb 编辑:程序博客网 时间:2024/04/26 08:52

简介

spring是一个开源框架,spring可以做非常多的事情,但是spring的目标是致力于简化Java开发。
为了降低spring开发的复杂性,spring采取了以下四个关键策略.
基于pojo的轻量级和最小入侵性编程
通过依赖注入和面向接口实现松耦合
基于面向切面的惯例进行声明式编程
通过切面和模板减少样板式代码

说明spring核心

IOC(控制反转)

场景:人读书

那么定义两个类 人 和 书

public class People {    public String name;    private int age;    private Book book;    public void readBook(){        System.out.println(book.getName());    }    public Book getBook () {        return book;    }    public void setBook(Book book) {        this.book = book;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}
public class Book {    private String name;    private String author;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getAuthor() {        return author;    }    public void setAuthor(String author) {        this.author = author;    }}

如果直接执行下面的代码就会抛出 空指针异常 .

     public static void main(String[] args) {        People people = new People();        people.readBook();    }

必须改成

    public static void main(String[] args) {        People people = new People();        Book book = new Book();        people.setBook(book);        people.readBook();    }

这里就需要对people对象的构建,book对象的构建全部由程序来完成.
而交给spring管理呢,就会帮助我们省去手动new一个的对象的过程,由spring帮助我们自动生成这个对象,而免去手动构造一个对象,手动销毁一个对象都交由spring控制,这就叫做控制反转.

交给spring管理的代码片段

public class Main {    private static ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");    public static void main(String[] args) {        People people = (People) context.getBean("people");        people.readBook();    }}

DI(依赖注入)

上面的例子中Book就是通过DI注入到people中,people不用关注book从哪里来,只需要调用读书的方法就好,book是spring通过反射生成交给people的.

AOP(面向切面)

场景 人跑步

定义两个类,一个run,一个通知类advices

/** * 被代理的目标类 */public class Run{    public void run(String name , int km){        System.out.println(name + " : run" + km);    }}
import org.aspectj.lang.JoinPoint;/** * 通知类,横切逻辑 * */public class Advices {    public void before(JoinPoint jp){        System.out.println("----------跑步之前注意热身,别受伤----------");    }    public void after(JoinPoint jp){        System.out.println("----------跑步完了放松肌肉----------");    }}

想要在跑步之前提醒跑步者注意热身,跑步完之后提醒跑步者进行放松.

<bean id="run" class="com.jx.spring01.Run"/>    <bean id="advices" class="com.jx.spring01.Advices"/>    <!-- aop配置 -->    <aop:config proxy-target-class="true">        <!--切面 -->        <aop:aspect ref="advices">            <!-- 切点 -->            <aop:pointcut expression="execution(* com.jx.spring01.Run.*(..))" id="pointcut1"/>            <!--连接通知方法与切点 -->            <aop:before method="before" pointcut-ref="pointcut1"/>            <aop:after method="after" pointcut-ref="pointcut1"/>        </aop:aspect>    </aop:config>

调用测试类

private static ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");    public static void main(String[] args) {        Run run = (Run) context.getBean("run");        run.run("张三", 10);    }

打印结果

----------跑步之前注意热身,别受伤----------张三 : run10----------跑步完了放松肌肉----------

本章内容只是入门简单说明spring的核心ioc和aop的概念。具体用法后面会提到.

0 0
原创粉丝点击