基于Annotation装配Bean:
控制反转IoC的总介绍:
学习笔记(04):轻松搞定Spring全家桶(初识篇)-控制反转IOC:
1.基于注解装配Bean:
1)常用注解:
-
@Component
可以使用此注解描述Spring中的Bean,但它是一个泛化的概念, 仅仅表示一个组件(Bean) , 并且可以作用在任何层次。使用时只需将该注解标注在相应类上即可。 -
@Repository
用于将数据访问层(DAO层)的类标识为Spring中的Bean,其功能与@Component相同。 -
@Service
通常作用在业务层(Service层) ,用于将业务层的类标识为Spring中的Bean,其功能与@Component相同。 -
@Controller
通常作用在控制层(如Struts2的Action),用于将控制层的类标识为Spring中的Bean,其功能与@Component相同。 -
@Autowired
用于对Bean的属性变量、属性的Set方法及构造函数进行标注,配合对应的注解处理器完成Bean的自动配置工作。默认按照Bean的类型进行装配。
@Qualifier
与@Autowired注解配合使用,会将默认的按Bean类型装配修改为按Bean的实例名称装配,Bean 的实例名称由@Qualifier注解的参数指定。 -
@Resource (从javax .annotation导入,默认情况下没有,可在此处下载,可能需要翻墙,没办法的移步这里,需要一点积分,白嫖党私信我)
其作用与Autowired 一样。其区别在于@Autowired默认按照Bean类型装配,而@Resource默认按照Bean实例名称进行装配。
@Resource中有两个重要属性值: name和type。
Spring将name解析为按Bean实例名称,将type 解析为按Bean实例类型。如果指定name,则按实例名称进行装配;如果指定type,则按Bean类型进行装配。如果都不指定,则先按Bean实例名称装配,如果不能匹配,则再按照Bean类型进行装配;如果都无法匹配,则抛出NoSuchBeanDefinitionException异常。
2.例子:(这个例子中用到了一部分aop的内容,所以需要导入一个aop的jar包,下载)只是一个例子,而且还不具备代表性,凑活可以看看怎么用
- 修改xml配置文件,引入命名空间(保证项目能引用到common-annotations.jar)/IocAnnotationProject/resource/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-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 扫描对应的包使注释成立 -->
<context:component-scan base-package="com.ioc"></context:component-scan>
</beans>
- /IocAnnotationProject/src/com/ioc/UserDao.java
package com.ioc;
import org.springframework.stereotype.Repository;
@Repository
public class UserDao {
public void findUser() {
System.out.println("--------run dao layer");
}
}
- /IocAnnotationProject/src/com/ioc/UserService.java
package com.ioc;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserDao userDao;
public void findUser() {
userDao.findUser();
System.out.println("--------run service layer");
}
}
- /IocAnnotationProject/src/com/ioc/UserController.java
package com.ioc;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller("user")
public class UserController {
@Autowired
private UserService userService;
public void findUser() {
userService.findUser();
}
}
- /IocAnnotationProject/src/com/ioc/TestUserController.java
package com.ioc;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
class TestUserController {
@Test
void testFindUser() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserController userController = context.getBean("user", UserController.class);
userController.findUser();
}
}