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")
采用這種方式只需要在類中寫一次,因此,不需要在每一個方法中都寫獲取容器的代碼,可以減少代碼量。