Spring【注解实现IOC(@Component、@Repository、@Service、@Controller)】(三)-全面详解(学习总结---从入门到深化)

 

 

目录

DI_依赖注入类型

注解实现IOC_准备工作

注解实现IOC_@Component

 注解实现IOC_@Repository、@Service、@Controller

注解实现IOC_@Scope

注解实现IOC_@Autowired 

注解实现IOC_@Qualifier 

注解实现IOC_@Value


DI_依赖注入类型

 DI支持注入bean类型、基本数据类型和字符串、List集合、Set集合、Map集合、Properties对象类型等,他们的写法如下:

1、准备注入属性的类

public class StudentService {
    private StudentDao studentDao; // bean属性

    private String name; //字符串类型

    private int count; //基本数据类型

    private List names; // 字符串类型List集合

    private List students1; // 对象类型List集合

    private Set students2; // 对象类型Set集合

    private Map names2; //字符串类型Map集合

    private Map students3;// 对象类型Map集合

    private Properties properties;//Properties类型

    // 省略getter/setter/toString
}

2、准备测试方法

@Test
public void t3(){
    ApplicationContext ac = newClassPathXmlApplicationContext("bean.xml");
    StudentService studentService =(StudentService)ac.getBean("studentService");
    System.out.println(studentService);
}

注入bean类型

写法一:



    

写法二:



    
        
    

注入基本数据类型


    
    
    
    
        10
    

注入List集合


    
    
        
            强学习
            程序员
        
    
    
    
        
            
                
                
                
            
            
                
                
                
            
        
    

注入Set集合


    
    
        
            
                
                
                
            
            
                
                
                
            
        
    

注入Map集合

简单数据类型Map集合:


    
        
            
            
        
    

对象类型Map集合:


    
        
            
            
        
    


    
    
    


    
    
    

注入Properties对象


    
        
            值1
            值2
        
    

注解实现IOC_准备工作

注解配置和xml配置对于Spring的IOC要实现的功能都是一样的,只是配置的形式不一样。

准备工作

1 创建一个新的Spring项目。

2 编写pojo,dao,service类。

3 编写空的配置文件,如果想让该文件支持注解,需要添加新的约束:



注解实现IOC_@Component

 作用:用于创建对象,放入Spring容器,相当于

 位置:类上方

 注意:

     1、要在配置文件中配置扫描的包,扫描到该注解才能生效。

   2、@Component 注解配置bean的默认id是首字母小写的类名。也 可以手动设置bean的id值。

// 此时bean的id为studentDaoImpl
@Component
public class StudentDaoImpl implements StudentDao{
    public Student findById(int id) {
        // 模拟根据id查询学生
        return new Student(1,"程序员","北京");
   }
}
// 此时bean的id为studentDao
@Component("studentDao")
public class StudentDaoImpl implements StudentDao{
    public Student findById(int id) {
        // 模拟根据id查询学生
        return new Student(1,"程序员","北京");
   }
}

 注解实现IOC_@Repository、@Service、@Controller

 作用:这三个注解和@Component的作用一样,使用它们是为了区 分该类属于什么层。

位置:

1、@Repository用于Dao层

2、@Service用于Service层

3、@Controller用于Controller层

@Repository
public class StudentDaoImpl implements StudentDao{}
@Service
public class StudentService {}

注解实现IOC_@Scope

 作用:指定bean的创建策略

位置:类上方

取值:singleton prototype request session globalsession

@Service
@Scope("singleton")
public class StudentService {}

注解实现IOC_@Autowired 

作用:从容器中查找符合属性类型的对象自动注入属性中。用于代替 中的依赖注入配置。

位置:属性上方、setter方法上方、构造方法上方。

注意:  

       1、@Autowired 写在属性上方进行依赖注入时,可以省略setter方法。

       

@Component
public class StudentService {
    @Autowired
    private StudentDao studentDao;
    public Student findStudentById(int id)
     {
        return studentDao.findById(id);
     }
}
@Test
public void t2(){
    ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
    StudentService studentService =(StudentService)ac.getBean("studentService");
  System.out.println(studentService.findStudentById(1));
}

      2、容器中没有对应类型的对象会报错

// 如果StudentDaoImpl没有放到容器中会报错
//@Component("studentDao")
public class StudentDaoImpl implements StudentDao{
    public Student findById(int id) {
        // 模拟根据id查询学生
        return new Student(1,"程序员","北京");
   }
}

3 、容器中有多个对象匹配类型时,会找beanId等于属性名的对 象,找不到会报错。

// 如果容器中都多个同类型对象,会根据id值等于属性
名找对象
@Component("studentDao")
public class StudentDaoImpl implements StudentDao{
    public Student findById(int id) {
        // 模拟根据id查询学生
        return new Student(1,"程序员","北京");
   }
}
@Component
public class StudentDaoImpl implements StudentDao{
    public Student findById(int id) {
        // 模拟根据id查询学生
        return new Student(1,"程序员","北京");
 }
}

注解实现IOC_@Qualifier 

 

 作用:在按照类型注入对象的基础上,再按照bean的id注入。

位置:属性上方

注意:@Qualifier必须和@Autowired一起使用。

@Component
public class StudentService {
    @Autowired
    @Qualifier("studentDaoImpl2")
    private StudentDao studentDao;
    public Student findStudentById(int id){
        return studentDao.findById(id);
   }
}

注解实现IOC_@Value

 作用:注入String类型和基本数据类型的属性值。

位置:属性上方

用法:

        1 、直接设置固定的属性值

@Service
public class StudentService {
    @Value("1")
    private int count;
    @Value("hello")
    private String str;
}

        2 、获取配置文件中的属性值:

                 2.1 、编写配置文件db.properties

                  

jdbc.username=root
jdbc.password01=123456

                 2.2、spring核心配置文件扫描配置文件

                 


                2.3 注入配置文件中的属性值

@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;

你可能感兴趣的:(Spring全家桶,#,Spring,Spring)