spring中常用的功能主要的是ioc和aop,此處主要說明下,實例注冊和使用的方法,此為學習后的筆記記錄總結
1.使用xml文件配置
在idea中創建maven工程,然后創建實例Person,然后在配置文件中配置bean,具體代碼如下所示:,
public class Person { private String name; private Integer age; public Person(){ super(); } public Person(String name,Integer age){ super(); this.name=name; this.age=age; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(Integer age) { this.age = age; } public Integer getAge() { return age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="user" class="com.enjoy.cap1.Person"> <property name="name" value="zhangsan"/> <property name="age" value="23"/> </bean> </beans>
import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * 類說明 * * @Date: 2019/5/1 14:54 * @Version: 1.0 */ public class MainTest1 { public static void main(String []args){ ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml"); Person person= (Person) ac.getBean("user"); System.out.println(person); } }
以上是使用xml文件配置實現的bean的注冊和使用,運行結果如下所示:
----------------------------------------------------------------------------
2.下面使用注解的方式進行bean的注冊與使用
首先需要一個配置文件,本例使用MainConfig.java,實例同上Persion,測試文件MainTest.java文件
代碼如下所示:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * 類說明 * * @Date: 2019/5/1 14:56 * @Version: 1.0 */ @Configuration public class MainConfig { @Bean public Person person(){ return new Person("lisi",20); } }
public class MainTest2 { public static void main(String []args){ ApplicationContext app=new AnnotationConfigApplicationContext(MainConfig.class); Person person= (Person) app.getBean("person"); System.out.println(person); } }
運行結果如下所示:
針對以上情況的特殊說明:
1)在獲取bean的實例時,xml配置文件中給出class指定類的全路徑名,id指定Bena的名稱,是通過反射創建對象(Person)的實例,
創建時需要有構造器,否則會在運行時提示bean構造報錯;或者使用默認的構造器,或者自己創建帶參的構造器,在注入的時候設置構造器參數,
對象的創建是有spring容器來創建和管理,而不是對象本身,通過依賴注入完成對象的依賴關系。
2)使用注解方式實現bean的注冊時,可以通過構造器的名字進行改寫,或者通過bean標簽指定bean的名字,而不是固定的實體類的構造器名字,
一般默認情況是構造器的名字。注解可以使用掃描配置或者import等標簽配置使用其他標簽

若是不想直接改方法的名字,可以在@Bean標簽后面直接指定bean的名字,如下截圖所示:

測試時使用注解中的測試類即可。此處不再進行測試說明。
3)以上是bean的注冊使用說明,但若是類特別多,則配置起來就會特別繁瑣,增加工作量,此時就可以通過掃描標簽幫助注冊bean實例,
代碼說明如下所示;
@Configuration @ComponentScan(value = "com.enjoy.cap2") public class MainConfig { }
測試類的代碼如下所示:
public class Test02 { @Test public void test(){ AnnotationConfigApplicationContext app=new AnnotationConfigApplicationContext(MainConfig.class); String [] names=app.getBeanDefinitionNames(); for (String name:names){ System.out.println(name); } } }
實體類不變,程序的運行結果如下所示;
4)在spring的容器中注冊bean時默認是單例的,因為在整個容器中,通過id獲取的時候,id值是唯一的,在容器啟動時就創建並放到容器中(容器是一個map對象)
可以在配置文件中通過標簽進行配置,在bean配置處,增加@Scope(“prototype”) ,可以實現多例,配置文件修改的代碼如下所示:
測試類不變,在運行后會得出false的執行結果。
5)雖然spring容器中bean的注冊默認是單例的,但可以通過標簽@Lazy來指定獲取對象時在進行bean實例的創建,而不是在容器啟動時創建bean實例
不配置懶加載標簽時,程序代碼及運行結果如下所示;
package com.enjoy.cap4.config; import com.enjoy.cap1.Person; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * 類說明 * * @Date: 2019/5/1 16:16 * @Version: 1.0 */ @Configuration public class MainConfig { @Bean public Person person(){ System.out.println("在容器中添加Person類的bean實例"); return new Person("zhangsan",11); } }
public class Test04 { public static void main(String []args){ AnnotationConfigApplicationContext app=new AnnotationConfigApplicationContext(MainConfig.class); System.out.println("IOC容器創建完成........"); app.getBean("person"); } }
程序的運行結果為;
若在配置文件中的bean實例上添加Lazy標簽,代碼如下所示: