環境配置
1.在配置文件中導入約束(context — 共三個)并添加一項配置( context:annotation-config/) 才能支持注解的使用
context 約束:
- xmlns:context=“http://www.springframework.org/schema/context”
2.xsi:schemaLocation下的:" http://www.springframework.org/schema/context"
3.xsi:schemaLocation下的:" https://www.springframework.org/schema/context/spring-context.xsd"
<?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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置Spring自動掃描com.zbt.anno包 這個包下的注解就可以生效 --><context:component-scan base-package="com.zbt.anno"/><context:annotation-config/></beans>
2.在配置文件中添加一項注解掃描配置,掃描指定的包
<!-- 配置Spring自動掃描com.zbt.anno包 這個包下的注解就可以生效 -->
<context:component-scan base-package="com.zbt.anno"/>
使用注解進行開發
1. 類的注冊——@Component
1.在dto包下建一個類User
有一個屬性name 我們給他一個默認值為“名字”
package com.zbt.anno.dto;/*** @author* @createAt 2025/1/12 16:36*/public class User {private String name = "名字";public String getName() {return name;}public void setName(String name) {this.name = name;}
}
按照之前接觸到的開發方式,我們需要將user類在xml中注冊為bean
<bean id="user" class="com.zbt.anno.dto.User"/>
使用注解進行開發則不必如此麻煩,因為User的包路徑為 com.zbt.anno.dto,而我們將com.zbt.anno 配置為Spring自動掃描路徑,所以,只要在User類的類名的上一行加上注解==@Component==即可完成User類在Spring容器中的注冊。
package com.zbt.anno.dto;import org.springframework.stereotype.Component;/*** @author* @createAt 2025/1/12 16:36*/@Component
public class User {private String name = "名字";public String getName() {return name;}public void setName(String name) {this.name = name;}
}
編寫測試類MyTest.java
import com.zbt.anno.dto.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @author* @createAt 2025/1/12 17:00*/public class MyTest {@Testpublic void testComponent(){ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");User user = context.getBean("user", User.class);System.out.println(user.getName());}
}
控制臺輸出如下:
Component有幾個衍生注解@Controller、@Service、@Repository
@Controller:controller層注冊bean使用
@Service:service層注冊bean使用
@Repository:dao層注冊bean使用
2.屬性的注入——@Value
按照之前接觸到的開發方式,我們需要將user類在xml中注冊為bean,然后通過標簽注入String類型的屬性
<bean id="user" class="com.zbt.anno.dto.User"><property name="name" value="名字"/></bean>
使用注解進行開發則,只要在屬性名的上一行加上注解==@Value(“要注入的屬性值”)==即可完成該屬性的屬性值注入。
package com.zbt.anno.dto;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;/*** @author* @createAt 2025/1/12 16:36*/@Component
public class User {@Value("名字")private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}
運行先前的測試類MyTest.java
同樣可以看到控制臺輸出——名字
java類進行配置(無需使用xml文件配置bean)
可以在java類名上加上@Configuration,即可將這個類作為Spring的配置類
@Configuration 可以理解為xml標簽中的beans標簽,里面可以用bean標簽配置多個類的bean,@Configuration注解的類里面,可以使用@Bean注解配置類的bean。
MyConfiguration .java
package com.zbt.anno.conf;import com.zbt.anno.dto.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author* @createAt 2025/1/12 19:37*/@Configuration
public class MyConfiguration {/*等同于<bean id="getUser" class="com.zbt.anno.dto.User" />*///使用@Bean標注 取對象時 要通過 方法名獲取 也可以寫作@Bean(name="bean的id") 規定bean的id,就可以直接通過這個id取到對象@Beanpublic User getUser(){return new User();}
}
加載配置
之前加載xml配置文件,現在加載java配置類。
import com.zbt.anno.conf.MyConfiguration;
import com.zbt.anno.dto.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @author* @createAt 2025/1/12 17:00*/public class MyTest {@Testpublic void testJavaApplicationConfig(){//加載配置類ApplicationContext context = new AnnotationConfigApplicationContext(MyConfiguration.class);//取對象時 要通過 方法名獲取User user = context.getBean("getUser", User.class);System.out.println(user.getName());}
}
配置類可以使用的一些注解
@ComponentScan(“包路徑”):配置包的掃描路徑 等同于配置文件中的 <context:component-scan base-package=“包路徑”/>
@Import(被引入的配置類的class對象):合并其他的配置類至此 等同于配置文件中的