码迷,mamicode.com
首页 > 编程语言 > 详细

Spring

时间:2014-12-16 18:55:44      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   io   color   os   使用   sp   

 

Spring的两个核心概念

  • IOC      (Inversion of Control 控制反转)
  • AOP     (Aspect Orient Programming 面向切面编程)

 

 

控制反转和依赖注入

     

       控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。

 

有一个实体操作接口和实现类

public interface UserDAO {
    public void save(User user);
}



public class UserDAOImpl implements UserDAO {

    public void save(User user) {        
        System.out.println("user saved!");
    }
}

 

有一个实体类

bubuko.com,布布扣
public class User {
    private String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}
User

 

有一个工具类

public class UserService {
    private UserDAO userDAO;  
    public void add(User user) {
        userDAO.save(user);
    }
    public UserDAO getUserDAO() {
        return userDAO;
    }
    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }
}

 

 由一个测试类

public class UserServiceTest {

    @Test
    public void testAdd() throws Exception {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");        
        
        UserService service = (UserService)ctx.getBean("userService");        
        
        User u = new User();
        u.setUsername("zhangsan");
        u.setPassword("zhangsan");
        service.add(u);
    }
}

 

 

      

      从测试类本身来看,需要两个地方进行初始化

      service对象的初始化,以及add方法中使用的是UserDAO 的哪一个实现类是没有指定的(也就是内部的UserDao没有初始化)。

 

      但是加入了一个容器:

<beans >

  <bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl">
  </bean>    
  <bean id="userService" class="com.bjsxt.service.UserService">
      <property name="userDAO" ref="u" />          
  </bean> 
</beans>

 

 

  • bean相当于new一个对象
  • ref相当于引入一个已经new的对象 

 

          之后,在spring框架下,这个程序是可以正常运行的。

 

          也就是说把具体对象的初始化交给这个容器来完成。这个就是控制反转的意义

          控制反转意思就是说以前可以在类中控制具体的初始化,现在交给由容器完成

          具体的类 从控制实现到控制抽象(接口),从实现具体的东西,到实现抽象的东西

          也就是说UserService 类里面不需要初始化DAO对象

          UserServiceTest 类里面也不需要初始化UserService对象

           这些都交给容器来完成

 

          service.add(u)    具体add的具体实现依赖于容器注入给的DAO对象,这个就是依赖注入

 

注入类型

 

主要有两种

  • setter注入
  • 构造方法注入

 

        setter注入就是使用set方法

 

public class SimpleMovieLister {

    // the SimpleMovieLister has a dependency on the MovieFinder
    private MovieFinder movieFinder;

    // a setter method so that the Spring container can inject a MovieFinder
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

    // business logic that actually uses the injected MovieFinder is omitted...

}

 

 

       bean.xml不变

 

       构造方法注入用的很少

<bean id="exampleBean" class="examples.ExampleBean">
    <constructor-arg type="int" value="7500000"/>
    <constructor-arg type="java.lang.String" value="42"/>
</bean>

 

name和id

  <bean name="u" class="com.bjsxt.dao.impl.UserDAOImpl">
  </bean>

 

        这两个基本一致,没啥区别

 

Spring

标签:style   blog   http   ar   io   color   os   使用   sp   

原文地址:http://www.cnblogs.com/tech-bird/p/4167601.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!