Spring5学习笔记__03
程序员文章站
2024-02-26 19:31:58
...
注解的简单使用
1、什么是注解
(1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值…)
(2)使用注解,注解作用在类上面,方法上面,属性上面
(3)使用注解目的:简化 xml 配置
2、使用注解创建类的实例与注入属性
配置文件:
<?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 http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 使用注解创建实例 -->
<!--1、打开中组件扫描:使用名称空间context-->
<context:component-scan base-package="com.at"></context:component-scan>
</beans>
测试类:
public class TestAnnotation {
@Test
public void testAnnotation() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beanannotation1.xml");
UserService service = context.getBean("userService", UserService.class);
System.out.println(service);
service.add();
}
}
Dao类:
public interface UserDao {
public void add();
}
@Controller(value = "userDaoImpl")
public class UserDaoImpl implements UserDao {
@Override
public void add() {
System.out.println("UserDao add........");
}
}`
```java
@Controller(value = "userDaoImpl1")
public class UserDaoImpl1 implements UserDao {
@Override
public void add() {
System.out.println("UserDao add........");
}
}
service类:
package com.at.service;
import com.at.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
/**
* @author tao
* @version 1.0
* @date 2020-06-27 22:03
* @description 1.使用注解方式创建实例:@Component;2.根据注解注入属性
* Spring 针对 Bean 管理中创建对象提供注解
* (1)@Component
* (2)@Service
* (3)@Controller
* (4)@Repository
* * 上面四个注解功能是一样的,都可以用来创建 bean 实例
* *使用注解注入属性不用参加属性的set方法,其内部已经有了该方法的封装,区别于bean标签注入属性,更加方便
*/
@Component(value = "userService") //等同于<bean id="".....>中的id值,可以省略,默认是类名(UserService)首字母小写
public class UserService {
@Autowired
@Qualifier(value = "userDaoImpl")
//Autowired注解根据属性类型自动装配
//一个接口可能有多个实现类,此时使用注解创建类的实例应根据哪个实现类去创建呢?,搭配qualifire(根据名称注入),能精确创建
private UserDao userDao;
public void add() {
System.out.println("UserService add..........");
userDao.add();
}
}
运行:
总结:注解需要使用context名称空间开启组件扫描,组件扫描可以筛选自己想要扫描什么类型的注解
<!--示例 1
use-default-filters="false" 表示现在不使用默认 filter,自己配置 filter
context:include-filter ,设置扫描哪些内容
-->
<context:component-scan base-package="com.atguigu" use-default-filters="false">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--示例 2
下面配置扫描包所有内容
context:exclude-filter: 设置哪些内容不进行扫描
--><context:component-scan base-package="com.atguigu">
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
补充:完全注解
可以使用完全注解的方式代替xml配置文件创建实例以及注入属性
演示:类似使用xml文件–只需创建配置类和加载配置类,其他操作不变
1、创建一个配置类
@Configuration //说明此类为注解类
@ComponentScan(basePackages = {"com.at"}) //开启组件扫描
public class SpringCofig {
}
2、使用AnnotationConfigApplicationContext加载配置类,代替ClassPathXmlApplicationContext
@Test
public void testAnnotation1() {
//使用其他类加载配置类:AnnotationConfigApplicationContext是ApplicationContext接口下一个实现类
//ClassPathXmlApplicationContext("beanannotation1.xml");加载配置文件
//ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beanannotation1.xml");
//加载配置类
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringCofig.class);
UserService service = context.getBean("userService", UserService.class);
System.out.println(service);
service.add();
}
3、Spring 提供 IOC 容器实现两种方式:(两个接口)
(1)BeanFactory:IOC 容器基本实现,是 Spring 内部的使用接口,不提供开发人员进行使用
- 加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象
(2)ApplicationContext:BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人
员进行使用 - 加载配置文件时候就会把在配置文件对象进行创建
上一篇: Java语言描述二叉树的深度和宽度