spring 03 处理对象的依赖关系

给对象属性赋值(DI, 依赖注入),几种方式:

  1. 构造函数赋值
  2. set 方法注入值
  • 普通字段赋值
  • 集合属性 (list/map/property)
  1. 案例(Dao/service/action实例,处理依赖关系)
  • 常用的通过set方法注入
  • 内部bean
  • p名称空间
  • 自动装配
  • 注解
案例1:

beam.xml



    
    
    
    
        
        
        
        
            
                cn
                usa
            
        
        
        
            
                
                
            
        
        
        
            
                China
                America
            
        
    
    
    
      

@Data
public class User {

    private int id;
    private String name;
    // list集合
    private List list;
    // Map集合
    private Map map;
    // Properties 对象
    private Properties prop;
    
}
案例2:

beam.xml



  
    
     
    
     
     
     
     
     
     
     
     
     
     
      
 

类:
UserAction->UserService->UserDao
同样的结构,只是beam.xml的不同

自动装配

beam.xml



    
    
    
  
    
     
     
     
    
    
    
 
注解方式

导入schema文件 文件名为spring-context-2.5.xsd
beam.xml




    
    
    
    
 

@Controller //==@Controller("userAction")
@Data
public class UserAction {
    @Resource //==@Resource("")
    private UserService userService;
    
    public void save(){
        userService.save();
    }
}
@Data
@Service
public class UserService {
    @Resource
    private UserDao userDao;
    
    public void save(){
        userDao.save();
    }
}

@Repository
public class UserDao {
    public void save(){
        System.out.println("已经save");
    }
}
public class App {
    private ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml",App.class);

    @Test
    public void testUserAction() {
        //创建容器
        UserAction action = (UserAction) ac.getBean("userAction");
        action.save();
    }

}

注解总结:
@Component 表示一个组件(类),把当前组件加入ioc容器加入容器的组件的名称默认是类名第一个字母小写

@Component(“”) 指定加入ioc容器的组件类的类名
@Repository 标识是一个持久层的组件
@Service 标识是一个业务逻辑层的组件
@Controller 标识是一个控制层的组件
@Scope("prototype") 指定对象单例/多例
@Resource

  1. 默认根据修饰的字段名称会取ioc容器找对象自动注入
    找到后注入
  2. 如果名称没有找到,再根据类型查找 找到后就立刻注入
    如果改类型在ioc容器中有多个对象,报错!
  3. 根据类型也没有找到对象,报错!

@Resource(name =””) 会根据指定的名称去容器找对象自动注入

配置方式与注解方式:

  1. 配置, 便于维护但配置过多,比较繁琐
  2. 注解, 开发方便但简化配置,不利于后期维护,如果修改对象创建、关系处理,需要改代码!

你可能感兴趣的:(spring 03 处理对象的依赖关系)