环境配置
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对象):合并其他的配置类至此 等同于配置文件中的