Spring 最簡單的注入以及原理分析
spring 是直接讀取位元組碼解析上面的註解,只要是配置了@compponent ,@service註解的類,都會在spring 被解析和例項化,後面可以直接用Context來獲取類例項操作。
通過配置檔案 component-scan 和 在類上註解Component來實現最簡單配置
包名為: Com.Cn,Bing
配置檔案Beans.xml :
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="Com.Cn.Bing"/>
</beans>
Man檔案:
ClassPathResource resource=new ClassPathResource("Beans.xml");
BeanFactory context=new DefaultListableBeanFactory();
BeanDefinitionReader bdr=new XmlBeanDefinitionReader((BeanDefinitionRegistry) context);
bdr.loadBeanDefinitions(resource);
AwareBeanPoscesser ar=new AwareBeanPoscesser();
ar.setBeanFactory(context);
((ConfigurableBeanFactory)context).addBeanPostProcessor(ar);
Student te = (Student) context.getBean("student");
System.out.println(te.toString());
AwareBeanPoscesser 類:
package Com.Cn.Bing;
import org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor;
public class AwareBeanPoscesser extends AutowiredAnnotationBeanPostProcessor {
long i=100;
}
Student類:
@Component
public class Student {
public School school;
public Student() {
}
public void setSchool(School school) {
this.school = school;
}
public String toString() {
return "Student [ school=" + school + "]";
}
}