初识Spring:

      Spring作者:Rod Johnson

Spring框架由20个模块组成,这些模块分成六个部分,分别是Core Container,Data Access/Integration,Web,AOP,Instrumentation和Test.

Spring Core是框架的最基础的部分,提供了IoC特性。Spring Context为企业级开发提供了遍历和集成的工具。

Spring Aop是基于Spring Core的符合规范的切面编程的实现

Spring JDBC提供了提供了JDBC的抽象层,简化了JDBC编码

Spring ORM对市面上流行的ORM框架提供了支持

Spring Web为Spring在Web应用程序中的使用提供了支持

 

Spring 体系结构图:

 

 

最基础部分========Spring IoC

控制反转   (依赖注入)  面向对象编程的一种设计理念,降低程序代码之间的耦合度

先定义持久化方法:


public interface IUserBiz {
    //隔离的作用
    public void save(User user);
}

实现对User类的持久化操作

public class UserBiz implements IUserBiz {
    private IDao dao;
    public void save(User user) {
        dao.save(user);
    }
    public void setDao(IDao dao) {
        this.dao = dao;
    }
}

用户业务类,实现对User功能的业务管理

public class UserServiceImpl implements UserService
{

private UserDao dao=new UserDaoImpl();
public void addNewUser(User user){
dao.save(user);
}

}

bean文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">
         <!--IOC-->
    <bean id="happyService" class="cn.zixin.service.HappyService">
        <!--DI 依赖注入-->
        <property name="info" value="Spring"></property>
    </bean>

    <!--准备一个彩色墨盒-->
    <bean id="colorInk" class="cn.zixin.printer.ink.GrayInk"></bean>
    <!--准备一个B5纸-->
    <bean id="B5paper" class="cn.zixin.printer.paper.A5Paper"></bean>
    <!--准备打印机-->
    <bean id="printer" class="cn.zixin.printer.print.Printer">
        <property name="ink" ref="colorInk"></property>
        <property name="paper" ref="B5paper"></property>

    </bean>

    <!--dao-->
    <bean id="UserDao" class="cn.zixin.aop.UserDao"></bean>
    <!--service-->
    <bean id="UserBiz" class="cn.zixin.aop.service.UserBiz">
           <property name="dao" ref="UserDao"></property>
    </bean>
    <!--增强配置-->
    <!--前置配置-->
    <bean id="LoggerAfter" class="cn.zixin.aop.LoggerAfter"></bean>
    <!--后置配置-->
    <bean id="LoggerBefore" class="cn.zixin.aop.LoggerBefore"></bean>

    <!--Aop配置-->
    <aop:config>
        <aop:pointcut id="pointcut" expression="execution(* *..service.*.*(..))"></aop:pointcut>
        <aop:advisor advice-ref="LoggerAfter" pointcut-ref="pointcut"/>
        <aop:advisor advice-ref="LoggerBefore" pointcut-ref="pointcut"/>
    </aop:config>
</beans>

 

使用<BEAN>的一个组件时   ----------    id用来访问的唯一名称  name属性指定

测试类:

package cn.zixin.test;

import cn.zixin.aop.User;
import cn.zixin.aop.service.IUserBiz;
import cn.zixin.printer.print.Printer;
import cn.zixin.service.HappyService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created by benxin on 2017/7/22.
 */
public class FirstSpringTest {

    @Test
    public void firstTest(){
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        HappyService service=(HappyService) context.getBean("happyService");
        service.work();
    }
    @Test
    public void firstTests(){
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        Printer printer = (Printer) context.getBean("printer");
        printer.print();
    }
    @Test
    public void aop() {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        IUserBiz biz=(IUserBiz)ctx.getBean("UserBiz");
        User user=new User();
        biz.save(user);
        System.out.println("success!");
    }
}