栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring注入

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring注入

.基于xml的IOC  
  1)创建对象
 在resources里创建applicationContext.xml文件

文件头





创建对象

2)给创建的对象赋值
    A.使用setter注入
      注入分为简单类型注入和引用类型注入
      简单类型注入值使用value属性
      引用类型注入值使用ref属性
      必须要注意:使用setter注入必须提供无参的构造方法,必须提供setXXX()方法.

简单注入

创建实体类

        实体类里面必须有无参构造方法和全部属性的set方法

public class Student {
    private String name;
    private int age;
    public Student (){
        System.out.println("学生的无参构造方法............");
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

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

测试类

 @Test
    public void testStudent1(){
        //由Spring容器进行对象的创建

        //如果想从spring容器中去除对象,则要先创建容器对象,并启动才可以去对象
        ApplicationContext ac= new ClassPathXmlApplicationContext("s1/applicationContext.xml");
        //取出对象
        Student stu = (Student) ac.getBean("stu");
        System.out.println(stu);
    }

引用类型注入

        创建实体类

               实体类里面必须有无参构造方法和全部属性的set方法

                这里的例子是学生引用学校的类型

public class Student {
    private String name;
    private int age;

    //引用类型的成员变量,学生所在的学校
    private School school;

    public Student() {
        System.out.println("学生的无参构造方法被调用了......................");
    }

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

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setSchool(School school) {
        this.school = school;
    }
}
public class School {
    private String name;
    private String address;

    //为了给成员变量注入值,必须提供无参构造方法和setXXX()方法

    public void setName(String name) {
        this.name = name;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public School() {
        System.out.println("学校的无参构造方法被调用..............");

    }

    @Override
    public String toString() {
        return "School{" +
                "name='" + name + ''' +
                ", address='" + address + ''' +
                '}';
    }
}



    
        
        
        
    
    
    
        
        
    

 测试类

   @Test
    public void testStudent(){
        //创建容器对象
        ApplicationContext ac = new ClassPathXmlApplicationContext("s2/applicationContext.xml");
        //取出学生对象
        Student student= (Student) ac.getBean("student");
        System.out.println(student);
    }

基于注解的IOC注入

 1)创建对象的注解
    @Component:可以创建任意对象.创建的对象的默认名称是类名的驼峰命名法.也可以指定对象的名称@Component("指定名称").
    @Controller:专门用来创建控制器的对象(Servlet),这种对象可以接收用户的请求,可以返回处理结果给客户端.
    @Service:专门用来创建业务逻辑层的对象,负责向下访问数据访问层,处理完毕后的结果返回给界面层.
    @Repository:专门用来创建数据访问层的对象,负责数据库中的增删改查所有操作.

    案例:
    @Component("stu")  //交给Spring去创建对象,就是在容器启动时创建
    public class Student {
        @Value("张三")  ===>简单类型的值注入
        private String name;
        @Value("22")
        private int age;
        ...}

 2)依赖注入的注解
    简单类型(8种基本类型+String)的注入
    @Value:用来给简单类型注入值

@Component  //交给Spring去创建对象,就是在容器启动时创建
public class Student {
    @Value("zhangs")  //简单注入值
    private String name;
    @Value("22")  //简单注入值
    private int age;

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

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



    
    

    引用类型的注入
    A.@Autowired:使用类型注入值,从整个Bean工厂中搜索同源类型的对象进行注入.
    同源类型也可注入.
    什么是同源类型:
      a.被注入的类型(Student中的school)与注入的类型是完全相同的类型

                按照相同类型注入

@Component
public class School {
    @Value("清华大学")
    private String name;
    @Value("成华大道")
    private  String address;

    public School() {
        System.out.println("学校的无参构造方法。。。。。。。。。。");
    }

    @Override
    public String toString() {
        return "School{" +
                "name='" + name + ''' +
                ", address='" + address + ''' +
                '}';
    }
}
@Component
public class Student {
    @Value("zhangsan")
          private String name;
    @Value("21")
          private int age;
    //引用类型按类型注入
    @Autowired
          private School school;

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


    

                 按照名称注入只改一个地方

@Component
public class Student {
    @Value("zhangsan")
          private String name;
    @Value("21")
          private int age;
    //引用类型按类型注入
    @Autowired
    @Qualifier("school")  //对应名称注入   要加入名称注入的名称  要是Spring工厂中已有的名称
          private School school;

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


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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/895078.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号