美文网首页
[java][spring]:注意及配置文件小记

[java][spring]:注意及配置文件小记

作者: 阿不不不不 | 来源:发表于2018-11-18 16:22 被阅读8次

spring的核心:控制反转(Ioc)及面向切面(AOP)

Ioc

提供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");
    }
}
1.1 配置文件
<?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>

1.2 测试
@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 依赖注入

DI Dependency Injection ,依赖注
 is a :是一个,继承。
 has a:有一个,成员变量,依赖。
  class B {
          private A a;   //B类依赖A类
       }
  依赖:一个对象需要使用另一个对象
  注入:通过setter方法进行另一个对象实例设置。
 例如:
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.1        目标类
创建BookService接口和实现类
创建BookDao接口和实现类
将dao和service配置xml文件
使用api测试
 1.1.1    dao
public interface BookDao {
public void addBook();
}

 public class BookDaoImpl  implements  BookDao {
      @Override
       public void addBook() {
            System.out.println("di add book");
      }
}
1.1.2    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();
      }

}
 1.2        配置文件
<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设置给service:bookService.setBookDao(bookDao);          DI   <property>

          <property> 用于进行属性注入
                name: bean的属性名,通过setter方法获得
                setBookDao ##> BookDao  ##> bookDao
                ref :另一个bean的id值的引用
          -->
         <!-- 创建service -->
         <bean id="bookServiceId"*class=*"com.itheima.b_di.BookServiceImpl">
                  <property name=*"bookDao"* ref=*"bookDaoId"*></property>
         </bean>
         <!-- 创建<u>dao</u>实例 -->
        <bean id="bookDaoId"class="com.itheima.b_di.BookDaoImpl"*></bean>
</beans>
 1.3        测试
         @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(); 

标签

<property>用于进行属性注入

name:bean的属性名,通过setter方法获得
ref:另一个bean的id值的引用
如:

<!-- 创建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>

相关文章

网友评论

      本文标题:[java][spring]:注意及配置文件小记

      本文链接:https://www.haomeiwen.com/subject/josgfqtx.html