spring-01

  1. Spring是一个开源框架
  2. 轻量级:与EJB对比,依赖资源少,销毁的资源少。
  3. 分层: 一站式,每一个层都提供的解决方案

       web层:struts,spring-MVC

       service层:spring

       dao层:hibernate,mybatis , jdbcTemplate  --> spring-data

spring核心

   Spring的核心是控制反转(IoC面向切面(AOP

spring优点

  1. 方便解耦,简化开发  (高内聚低耦合)(减少重复,减少关系)
    • Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理
    • spring工厂是用于生成bean
  2. AOP编程的支持
    • Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
  3. 声明式事务的支持
    • 只需要通过配置就可以完成对事务的管理,而无需手动编程
  4. 方便程序的测试
    • Spring对Junit4支持,可以通过注解方便的测试Spring程序
  5. 方便集成各种优秀框架
    • Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
  6. 降低JavaEE API的使用难度
    • Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

 

核心容器:beanscorecontextexpression

入门案例:IoC【掌握】

 导入jar包

4 + 1  : 4个核心(beans、core、context、expression) + 1个依赖(commons-loggins...jar)

目标类

     提供UserService接口和实现类

     获得UserService实现类的实例

       之前开发中,直接new一个对象即可。

       学习spring之后,将由Spring创建对象实例--> IoC 控制反转(Inverse of  Control)

              之后需要实例对象时,从spring工厂(容器)中获得,需要将实现类的全限定名称配置到xml文件中

public interface UserService {

  

   public void addUser();

 

}

 

public class UserServiceImpl implements UserService {

 

   @Override

   public void addUser() {

      System.out.println("a_ico add user");

   }

 

}

配置文件

    位置:任意,开发中一般在classpath下(src)

    名称:任意,开发中常用applicationContext.xml

    内容:添加schema约束

       约束文件位置:spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\ xsd-config.html

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       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">

    <!-- 配置service

        <bean> 配置需要创建的对象

            id :用于之后从spring容器获得实例时使用的

            class :需要创建实例的全限定类名

    -->

    <bean id="userServiceId" class="com.itheima.a_ioc.UserServiceImpl"></bean>

</beans>

单元测试:

package com.it.a_IOC;

import org.junit.Test;

public class TestIoc {

    @Test
    public void demo01(){
        //之前开发
        UserService userService = new UserServiceImpl();
        userService.addUser();
    }
}
 

@Test

    public void demo02(){

        //spring容器获得

        //1 获得容器

        String xmlPath = "com/itheima/a_ioc/beans.xml";

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);

        //2获得内容 --不需要自己new,都是从spring容器获得

        UserService userService = (UserService) applicationContext.getBean("userServiceId");

        userService.addUser();

    }

入门案例:DI【掌握】

  1. DI Dependency Injection ,依赖注入

       is a :是一个,继承。

       has a:有一个,成员变量,依赖。

              class B {

           private A a;   //B类依赖A类

        }

       依赖:一个对象需要使用另一个对象

       注入:通过setter方法进行另一个对象实例设置。

  1. 例如:

       class BookServiceImpl{

        //之前开发:接口 = 实现类  (service和dao耦合)

              //private BookDao bookDao = new BookDaoImpl();

             //spring之后 (解耦:service实现类使用dao接口,不知道具体的实现类)

              private BookDao bookDao;

              setter方法

   }

       模拟spring执行过程

       创建service实例:BookService bookService = new BookServiceImpl()         -->IoC  <bean>

       创建dao实例:BookDao bookDao = new BookDaoImple()                          -->IoC

       将dao设置给service:bookService.setBookDao(bookDao);                          -->DI   <property>

目标类

  1. 创建BookService接口和实现类
  2. 创建BookDao接口和实现类
  3. 将dao和service配置 xml文件
  4. 使用api测试

dao

public interface BookDao {

  

   public void addBook();

 

}

public class BookDaoImpl implements BookDao {

 

   @Override

   public void addBook() {

      System.out.println("di  add book");

   }

 

}

service

public interface BookService {

 

   public abstract void addBook();

 

}

public class BookServiceImpl implements BookService {

  

   // 方式1:之前,接口=实现类

// private BookDao bookDao = new BookDaoImpl();

   // 方式2:接口 + setter

   private BookDao bookDao;

   public void setBookDao(BookDao bookDao) {

      this.bookDao = bookDao;

   }

  

   @Override

   public void addBook(){

      this.bookDao.addBook();

   }

 

}

配置文件

 

<beans xmlns="http://www.springframework.org/schema/beans"

       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">

    <!--

    模拟spring执行过程

        创建service实例:BookService bookService = new BookServiceImpl() IoC  <bean>

        创建dao实例:BookDao bookDao = new BookDaoImpl()         IoC

        dao设置给servicebookService.setBookDao(bookDao);     DI   <property>

       

        <property> 用于进行属性注入

            name bean的属性名,通过setter方法获得

                setBookDao ##> BookDao  ##> bookDao

            ref :另一个beanid值的引用

     -->

 

    <!-- 创建service -->

    <bean id="bookServiceId" class="com.itheima.b_di.BookServiceImpl">

        <property name="bookDao" ref="bookDaoId"></property>

    </bean>

   

    <!-- 创建dao实例 -->

    <bean id="bookDaoId" class="com.itheima.b_di.BookDaoImpl"></bean>

   

 

</beans>

测试

    @Test

    public void demo01(){

        //spring容器获得

        String xmlPath = "com/itheima/b_di/beans.xml";

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);

        BookService bookService = (BookService) applicationContext.getBean("bookServiceId");

       

        bookService.addBook();

       

    }

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_35187942/article/details/87924360