说明:在SpringBoot中,我们可以通过在各层类上加注解(@Mapper、@Service等)声明Bean对象,在需要使用时,可直接使用@AutoWirted注解自动装配。但如果是使用第三方依赖中的对象,因为源码不能修改,不能在第三方依赖的类中加注解,所以如果想还使用自动自动装配,而不用new的方式创建对象,则可以使用以下方法实现。
(dom4j依赖中的SAXReader类,该依赖可用于解析XML文件,读取XML内容)
(通过new SAXReader对象的方式使用)
@Test
public void test01() throws DocumentException {
// 创建SAXReader对象
SAXReader saxReader = new SAXReader();
// 读取XML文件
Document document = saxReader.read(this.getClass().getClassLoader().getResource("demo.xml"));
// 解析XML文件
Element rootElement = document.getRootElement();
// 输出读取内容
String name = rootElement.element("name").getText();
String age = rootElement.element("age").getText();
System.out.println(name + " " + age);
}
(demo.xml文件内容)
<?xml version="1.0" encoding="UTF-8"?>
<emp>
<name>张三</name>
<age>20</age>
</emp>
(输出内容)
手动添加对象到IOC容器中
不想使用new 对象的方式使用,可手动将对象添加到IOC容器中,需要用到@Configuration、@Bean注解
@Configuration:表示该类是一个配置类,该类的职责是手动配置对象到IOC容器中;
@Bean:表示该方法返回的对象加入到IOC容器中;
import org.dom4j.io.SAXReader;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 手动添加SAXReader到IOC容器中
*/
@Configuration
public class AddConguration {
@Bean
public SAXReader addSAXReader(){
return new SAXReader();
}
}
手动配置完之后,其他类中可以使用@AutoWired注解自动装配并使用
/**
* 自动装配
*/
@Autowired
private SAXReader saxReader;
@Test
public void test01() throws DocumentException {
// 读取XML文件
Document document = saxReader.read(this.getClass().getClassLoader().getResource("demo.xml"));
// 解析XML文件
Element rootElement = document.getRootElement();
// 输出读取内容
String name = rootElement.element("name").getText();
String age = rootElement.element("age").getText();
System.out.println(name + " " + age);
}
重新执行test01()方法,可以看到也可以达到效果
总结
值得一提的是,将手动添加对象到IOC容器中的方法写在启动类中也可以,因为@SpringBootApplication包含了@Configuration注解,也可以当做是配置类,但是不推荐,要保证启动类的纯粹性。