每天都過的很快,今天de我依舊碌碌無為,心情依舊很down,加油 ,加油,小菜🦆
(一)標注在類上的應用
@Configuration作用等同於xml 中的<beans></beans> 標簽
MyConfigurationTest.java文件
@Configuration
public class MyConfigurationTest {
}
spring-context.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">
</beans>
MyConfigurationTest.java的作用等同於spring-context.xml文件
- 測試一下
- 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 ="myConfigTest" class ="vi.test.MyConfigurationTest2"></bean>
</beans>
public class MyConfigurationTest2 {
public MyConfigurationTest2() {
System.out.println("MyConfigurationTest2() *******");
}
}
- @Configuration寫法·
@Configuration
public class MyConfigurationTest {
public MyConfigurationTest() {
System.out.println("MyConfigurationTest() *******");
}
}
- test類
public class TestConfig {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(MyConfigurationTest.class);
ApplicationContext context2 = new ClassPathXmlApplicationContext("spring-context.xml");
}
}
- 執行結果
- 文件結構
(二)@Configuration+@Bean
@Bean相當於xml中的<bean></bean> 標簽
public class MyBeanTest {
public void test() {
System.out.println("MyBeanTest的test()");
}
public void init() {
System.out.println("init()");
}
public void destroy() {
System.out.println("destroy()");
}
}
@Configuration
public class MyConfigurationTest {
public MyConfigurationTest() {
System.out.println("MyConfigurationTest() *******");
}
@Bean(name="myBeanTest",initMethod = "init",destroyMethod = "destroy")
@Scope("prototype") // 根據需要定義
public MyBeanTest myBeanTest(){
return new MyBeanTest();
}
}
- test
public class TestConfig {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(MyConfigurationTest.class);
MyBeanTest myBeanTest = (MyBeanTest)context.getBean("myBeanTest");
myBeanTest.test();
}
}
- 運行結果
(三)@Configuration+@Import
- 普通類
public class MyBeanTest {
public void test() {
System.out.println("MyBeanTest的test()");
}
public void init() {
System.out.println("init()");
}
public void destroy() {
System.out.println("destroy()");
}
}
- @Import注解
@Configuration
@Import(MyBeanTest.class)
public class MyConfigurationTest {
public MyConfigurationTest() {
System.out.println("MyConfigurationTest() *******");
}
}
- test類
public class TestConfig {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(MyConfigurationTest.class);
MyBeanTest myBeanTest = (MyBeanTest)context.getBean(MyBeanTest.class);
myBeanTest.test();
}
}
- 運行結果
(四)@Configuration+@ComponentScan+@Component
springboot啟動類的用法,只不過springboot的啟動類的注解為聯合注解
大致意思是@ComponentScan(basePackages={"包路徑A","包路徑B",···})掃描指定路徑下的包路徑A,包路徑B···下的被@Component注解的類
- 加上@ComponentScan注解
@Configuration
@ComponentScan(basePackages = {"vi.test"})
public class MyConfigurationTest {
public MyConfigurationTest() {
System.out.println("MyConfigurationTest() *******");
}
}
- 加上@Component注解
@Component
public class MyBeanTest {
public void test() {
System.out.println("MyBeanTest的test()");
}
public void init() {
System.out.println("init()");
}
public void destroy() {
System.out.println("destroy()");
}
}
- test類
public class TestConfig {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(MyConfigurationTest.class);
MyBeanTest myBeanTest = (MyBeanTest)context.getBean("myBeanTest");
myBeanTest.test();
}
}
- 運行結果