SpringBoot学习笔记(三)——SpringBoot中的配置Bean
作者:互联网
在Spring中,我们可以使⽤XML的⽅式来对Spring进⾏配置,也可以通过Java Config(也就是类+注解)的⽅式进⾏配置,在Spring Boot中也是⼀样的。
方法一:使用xml的方式(xml文件+@importResource+@Autowired)
我们可以通过@ImportResource注解来导⼊⼀个XML⽂件作为Spring的配置⽂件. 示例如下: 让我们来重构之前创建出来的项目。 pom.xml中代码不变,依然如下:<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>springbootdemo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <!-- 父类包,引入这个依赖以后,下边的依赖就不需要写版本号了 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <!--web应用的相关包,其实就是springmvc和spring的相关包 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project>
修改com.example.MyApplication.java代码如下:
@EnableAutoConfiguration @ImportResource("spring.xml") public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
在com.example.controller包下创建UserController,代码如下:
@RestController public class UserController { @Autowired private UserService userService; @RequestMapping("/") String home() { return userService.test(); } }
在com.example.service包下创建UserService,代码如下:
public class UserService { public String test() { return "hello world, nice"; } }
在resources包下创建spring.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 https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="userService" class="com.example.service.UserService" /> <bean id="userController" class="com.example.controller.UserController" /> </beans>
然后就可以看到程序跑通了。
方法二:使用类+注解的方式(推荐使用)
我们也可以通过@Import+@Configuration+@Bean来进⾏等价替换掉XML的形式。 在方法一的基础上,pom.xml文件不用动。在com.example这个文件夹下新建AppConfig.java文件,这个文件相当于之前的xml配置文件,代码如下:
@Configuration public class AppConfig { @Bean public UserService userService(){ return new UserService(); } @Bean public UserController userController(){ return new UserController(); } }
修改MyApplication.java代码如下:
@EnableAutoConfiguration @Import(AppConfig.class) public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
UserService和UserController中的代码不用变。
方法三:自动扫描—+xml的方式实现配置
使用@Service和@Autowired注解+配置自动扫描就可以,使用@Service注解的话,就不用在xml文件中声明bean了,会自动将当前类注入到spring容器之中。
在方法一的基础上,在service类前加上@Service注解。
然后修改spring.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" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.example" /> </beans>
方法四:自动扫描+注解的方式完成配置
配置类的作⽤除开可以通过@Bean来定义Bean之外,也可以配置扫描路径,这样我们就直接不用AppConfig这个类了,因为@Controller和@Service(如果想让其它层的注册为bean,可以用@Component这个注解)这种注解是可以被@ComponentScan(“扫描包”)这个注解扫描到。 直接删除AppConfig这个类,然后修改MyApplication这个类如下:@EnableAutoConfiguration @ComponentScan("com.example") public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }这样就不需要⽤@Bean了,但是得在类上加上@Component注解来定义Bean。 扫描过程中,除开可以扫描到@Component、@Service、@Controller、@RestController等注解之外,也能扫描到@Configuration,也就是我们可以在扫描路径下定义其他的配置类。 另外,由于MyApplication类所在包就是com.example,所以我们可以直接这么写:
@EnableAutoConfiguration @ComponentScan() public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
同时,我们可以让MyApplication这个类本身作为配置类,也就是加上一个@Configuration这个注解。
代码变成了:
@EnableAutoConfiguration @Configuration @ComponentScan public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }此时MyApplication就存在三个注解: @EnableAutoConfiguration @Configuration @ComponentScan 在Spring Boot中,提供了⼀个注解来替代这三个注解,这个注解就是@SpringBootApplication。 所以代码就可以改成下列经典写法。
@SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
标签:xml,SpringBoot,args,笔记,public,Bean,MyApplication,注解,class 来源: https://www.cnblogs.com/worthmove/p/16690815.html