spring针对bean管理中创建对象的注解
- @Component
- @Service
- @Controller
- @Repository
上面这个四个注解的功能都是一样的,都可以用来创建bean实例。其中@Service常用在业务逻辑层,@Controller常用在web层,@Repository常用在持久层。
用注解创建bean实例的方法
- 需要额外导入aop的jar包
- 在spring的配置文件中添加如下配置信息
<beans
<!-- ..... -->
xmlns:context="http://www.springframework.org/shcema/context"
xsi:schemaLocation="http://www.springframework.org/shcema/context http://www.springframework.org/shcema/context/spring-context.xsd">
<!--开启组件扫描,会扫描该包下的所有类,查看是否有注解-->
<context:component-scan base-package="com.kun.Spring5"></context:component-scan>
<!--示例1
默认spring会有一个自己的filter,去扫描base-package包下的所有类
use-default-filters="false":表示不适用默认filter,自己配置filter
<context:include-filter/>里面的内容表示,扫描base-package包下所有注解是Controller的类。
-->
<context:component-sacn base-package="com.kun.Spring5" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
</beans>
<!--示例2
<context:exclude-filter/>里面的内容表示,扫描base-package包下所有注解,但不扫描注解是@Controller的类
-->
<context:component-scan base-package="com.kun.Spring5">
<context:exclude-filter type="annotatioon" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
- 在需要创建实例的类中添加注解
@Service(value = "userService") // 这里的value和配置文件中的id一样
@Service // 如果不写value,默认value就是类名的第一个首字母小写
public class UserService {
public void add(){
System.out.println("add...");
}
}
- 在测试类中进行测试
public class test {
@Test
public void test001(){
// 加载spring配置文件
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
// 创建对象
UserService userService = context.getBean("userService", UserService.class);
userService.add();
}
}
结果输出为add…
使用注解实现属性的注入
1. 注入对象
- @Autowired(根据属性的类型进行注入)
@Autowired // 根据类型注入,根据类型UserDao找到其实现类,然后进行注入
private UserDao userDao;
- @Qualifier(根据属性的名称进行注入,需要配合@Autowired使用)
@Autowired
@Qualifier(value = "userDaoImpl2") // 根据名称进行注入,注入实现类2
private UserDao userDao;
- @Resource(可以根据类型注入,也可以根据名称注入)
注意@Resource是javax包下的,高版本已经移除了
2.注入普通类型属性
@value
@Value(value = "琨哥")
private String name;
完全注解开发
- 编写配置类
@Configuration // 标志该类是一个配置类
@ComponentScan(basePackages={"com.kun.Spring5"})
public class SpringConfig{
}
- 编写测试方法
@Test
public void test001(){
// 加载配置类
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class)
// 创建对象
......
}