概述
从 Spring 2.5 开始就可以使用注解来配置依赖注入。 可以使用相关类,方法或字段声明的注解,将 bean 配置移动到组件类本身。便于升级和维护,提高开发效率
注解的基本用法
先创建一个Spring入门案例:【Spring】Spring入门案例
第一步:开启注解
<?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 http://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.lucas"/>
<!-- 如果有多个路径 ,号隔开
<context:component-scan base-package="com.lucas.service,com.lucas.dao"/>-->
</beans>
第二步:创建带注解Java代码
@Component
//等同于@Component("testComponent")或者@Component(value = "testComponent")
public class TestComponent {
//值的注入
@Value("张三")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void sayHello(){
System.out.println("hello world");
}
}
第三步:添加测试代码
public class App {
public static void main(String[] args) {
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml");
TestComponent testComponent = (TestComponent) applicationContext.getBean("testComponent");
testComponent.sayHello();
System.out.println(testComponent.getName());
}
}
运行结果
其他注解
除了 前面的案例用我们用到了Component 注解,除了这个注解以为,Spring还提供了还有其他三个功能与Component 一样的注解
@Service 一般用在Service层
@Controller 一般用在控制层
@Repository 一般用在数据库访问层
@Required注解应用于bean属性的setter方法
@Autowired注解可以应用到bean属性的setter方法,非setter方法,构造函数和属性
@Qualifier,通过指定确切的将被引用的bean,@Autowired和@Qualifier注解可以用来删除混乱
综合案例
项目结构如下:
开启注解
在applicationContext.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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- <context:annotation-config/>-->
<!-- 开启注解 配置扫描路径 -->
<context:component-scan base-package="com.lucas.service,com.lucas.dao,com.lucas.controller"/>
</beans>
dao层
public interface UserDao {
public void selectUser();
}
import org.springframework.stereotype.Repository;
@Repository("userDao")
public class UserDaoImpl implements UserDao{
@Override
public void selectUser() {
System.out.println("UserDaoImpl -> selectUser");
}
}
service层
public interface UserService {
public void selectUser();
}
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service("userService")
public class UserServiceImpl implements UserService{
@Resource
private UserDao userDao;
@Override
public void selectUser() {
userDao.selectUser();
System.out.println("UserServiceImpl -> selectUser");
}
}
controller层
@Controller
public class UserController {
@Autowired
private UserService userService;
public void selectUser(){
userService.selectUser();
System.out.println("UserController -> selectUser");
}
}
测试代码
public class App {
public static void main(String[] args) {
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml");
UserController userController = (UserController) applicationContext.getBean("userController");
userController.selectUser();
}
}
运行结果: