关于“这一次搞懂Spring的XML解析原理说明”的完整攻略,以下是我为您精心准备的:
什么是Spring的XML解析原理?
Spring的ApplicationContext是通过解析XML文件来实例化Bean对象的。Spring在启动时会先加载XML文件,然后将XML文件解析成一个个的BeanDefinition(Bean定义),最后将这些BeanDefinition对应的Bean实例化并生成Bean对象的实例化。
在这个过程中,Spring需要依靠xmlschema和指定的schema来解析XML文件,把解析之后的信息封装到BeanDefinition中,最终完成BeanFactory的实例化。
Spring的XML解析原理示例1 - 使用ClassPathXmlApplicationContext:
假设有如下的XML文件:
<?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="userDao" class="com.example.demo.UserDao">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="userService" class="com.example.demo.UserService">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="dataSource" class="com.example.demo.DataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
</beans>
我们可以使用ClassPathXmlApplicationContext来加载这个XML文件。其代码如下:
public class SpringTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("demo.xml");
UserService userService = context.getBean(UserService.class);
User user = userService.getUserById(1L);
System.out.println(user.getName());
}
}
这个示例中,我们使用ClassPathXmlApplicationContext来加载demo.xml文件。在ApplicationContext的初始化过程中,它会读取XML文件,并解析出每一个BeanDefinition,最终生成Bean对象示例。
Spring的XML解析原理示例2 - 使用XmlBeanFactory:
除了使用ClassPathXmlApplicationContext,Spring还提供了XmlBeanFactory来解析XML文件。XmlBeanFactory的实现非常简单:
public class XmlBeanFactory extends DefaultListableBeanFactory {
private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);
public XmlBeanFactory(Resource resource) throws BeansException {
this(resource, null);
}
public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {
super(parentBeanFactory);
this.reader.loadBeanDefinitions(resource);
}
}
可以看出,XmlBeanFactory也是通过读取XML文件,解析出每一个BeanDefinition,最终生成Bean对象的实例。
我们可以使用XmlBeanFactory来加载XML文件。其代码如下:
public class SpringTest {
public static void main(String[] args) {
Resource resource = new ClassPathResource("demo.xml");
XmlBeanFactory factory = new XmlBeanFactory(resource);
UserService userService = factory.getBean(UserService.class);
User user = userService.getUserById(1L);
System.out.println(user.getName());
}
}
这个示例中,我们使用XmlBeanFactory来加载demo.xml文件。在XmlBeanFactory的初始化过程中,它会读取XML文件,并解析出每一个BeanDefinition,最终生成Bean对象示例。
以上就是关于“这一次搞懂Spring的XML解析原理说明”的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:这一次搞懂Spring的XML解析原理说明 - Python技术站