Spring之基于注解的IOC(DI)

基于注解的IOC,必须要在spring的核心配置文件中添加包扫描

    
    

一、创建对象的注解

  • @Component:可以创建任意对象。创建的对象的默认名称是类名的驼峰命名法或@Component("student")的形式也可
  • @Controller:创建控制器对象,这个对象可以接受用户的请求,也可以返回处理结果
  • @Service:创建业务逻辑层对象,负责向下访问数据访问层,处理完毕后的结果返回给界面层
  • @Repository:创建数据访问层对象,负责数据库中的增删改查所有工作

二、依赖注入的注解

    1.简单类型(八种基本类型+spring)的注入

       @value:用来给简单类型注入值

@Component("student") //交给spring去创建对象,就是在容器启动时创建
public class Student {
    @Value("张三")
    private  String name;
    @Value("22")
    private int age;
    @Value("清华大学")
    private School school;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", school=" + school +
                '}';
    }

    public Student() {
        System.out.println("学生对象的无参构造方法被启用。。。。。。");
    }

}

    2.引用类型的注入
   A:@Autowired:使用类型注入值,从整个Bean工厂中搜索同源类型的对象进行注入。
       同源类型也可注入。啥是同源类型:

        a.被注入的类型(Student中的school)与注入的类型是完全相同的类型。

        b.被注入的类型(Student中的school父)与注入的类型(子)是父子类。

    【注意】在有父子类的情况下,使用按类型注入,就意味着有多个可注入的对象。此时按照名称进行第二次筛选,选中与被注入对象相同名称的对象进行注入。

        c.被注入的类型(Student中的school接口)与注入的类型(实现类)是接口和实现类的类型。

@Component("student") //交给spring去创建对象,就是在容器启动时创建
public class Student {
    @Value("张三")
    private  String name;
    @Value("22")
    private int age;
    //引用类型按类型注入
    @Autowired
    
    private School school;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", school=" + school +
                '}';
    }

    public Student() {
        System.out.println("学生对象的无参构造方法被启用。。。。。。");
    }

}


   B:Qualifier:使用名称注入值,从整个bean工厂中搜索相同名称的对象进行注入。

@Component("student") //交给spring去创建对象,就是在容器启动时创建
public class Student {
    @Value("张三")
    private  String name;
    @Value("22")
    private int age;
    //引用类型按类型注入
    @Autowired
    @Qualifier("school")
    private School school;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", school=" + school +
                '}';
    }

    public Student() {
        System.out.println("学生对象的无参构造方法被启用。。。。。。");
    }

}

你可能感兴趣的:(spring,java)