注解在Spring中的運用(對象獲取、對象單例/多例、值的注入、初始化/銷毀方法、獲取容器)


1、注解的方式獲取對象

(1)導包:

 (2)書寫配置文件(要保證已經導入了約束):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans" xmlns:util="http://www.springframework.org/schema/util"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="pers.zhb.domain"></context:component-scan>
</beans>

配置文件的核心就一句話,它的作用是:掃描pers.zhb.domain包下的所有類的注解。

(3)創建Student對象,並在里面添加注解:

import org.springframework.stereotype.Component;
@Component("student")
public class Student {
    private String snum;
    private String sname;
    private String sex;
    private Course course;
    public Student(String snum, String sname, String sex, Course course) {
        this.snum = snum;
        this.sname = sname;
        this.sex = sex;
        this.course = course;
    }
    public Course getCourse() {
        return course;
    }

    public void setCourse(Course course) {
        this.course = course;
    }

    public Student(){
        System.out.println("Student對象創建了!");
    }
    public String getSnum() {
        return snum;
    }

    public void setSnum(String snum) {
        this.snum = snum;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "Student{" +
                "snum='" + snum + '\'' +
                ", sname='" + sname + '\'' +
                ", sex='" + sex + '\'' +
                ", course=" + course +
                '}';
    }
}

該注解中的參數student相當於<bean>里面的name,通過student可以獲取到Student對象。

(4)創建測試類:

public class Test {
    public void test1(){
        ApplicationContext applicationContext=new
                ClassPathXmlApplicationContext("applicationContext.xml");//創建容器對象
        Student student  =(Student)applicationContext.getBean("student");
        student.setSname("zhai");
        System.out.println(student);
    }
    public static void main(String[] args){
        Test test=new Test();
        test.test1();
    }
}

(5)注解的四種方式:

 

第二個可以用於Service層對象的創建,第三個web層,第四個dao層。這四個注解只是名字不同而已,功能是相同的。

 

2、對象的單例 / 多例

(1)單例對象

 測試:

Student student1  =(Student)applicationContext.getBean("student");
        Student student2  =(Student)applicationContext.getBean("student");
        System.out.println(student1==student2);

返回結果為true,說明創建的是同一個對象。在spring容器中只存在一個bean的實例,bean以單里的形式存在

(2)多例對象

 測試:

Student student1  =(Student)applicationContext.getBean("student");
        Student student2  =(Student)applicationContext.getBean("student");
        System.out.println(student1==student2);

 返回的結果為false,創建的是兩個不同的對象。每次調用getBean()的時候都會返回一個新的實例

 

3、值的注入

(1)在屬性處賦值:

此種方式破壞了封裝性,不推薦,因此set方式更優。 

(2)在set方法處賦值:

 (3)注入引用數據類型的數據:

方式一:

創建Course對象,並將對象引入到容器:

 但是,這種方式有一個弊端,就是在有多個對象的情況下,將無法選擇具體選擇哪一個。

 方式二:

 指定注入哪一個對象。

 

 4、引入配置文件創建Spring容器

用此方法需要導入jar包:

ApplicationContext applicationContext=new
                ClassPathXmlApplicationContext("applicationContext.xml");//創建容器對象

創建容器的代碼可以用注解代替:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")

 采用這種方式只需要在類中寫一次,因此,不需要在每一個方法中都寫獲取容器的代碼,可以減少代碼量。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM