Gestión del bean de operación IOC (basada en el método de anotación)
1. ¿Qué es un comentario?
(1) La anotación es una marca de código especial, formato: @Nombre de la anotación (nombre del atributo = valor del atributo, nombre del atributo = valor del atributo ...)
(2) Utilice anotaciones, que actúan sobre clases, métodos y atributos.
(3) Propósito de usar anotaciones: simplificar la configuración xml
2, Spring proporciona gestión de anotaciones para crear objetos Bean
Las siguientes cuatro funciones de anotación son iguales, todas se pueden utilizarCrear instancia de bean
(1) @Componente
(2) @Servicio
(3) @Controller
(4) @Repositorio
3, forma basada en anotaciones para lograr la creación del objeto
El primer paso es introducir dependencias (presentando el paquete jar spring-aop )
El segundo paso es activar el escaneo de componentes
<!--开启组件扫描
1 如果扫描多个包,多个包使用逗号隔开
2 扫描包上层目录
-->
<context:component-scan base-package="com.atguigu"></context:component-scan>
El tercer paso es crear una clase y agregar una anotación para crear un objeto en la clase.
//在注解里面 value 属性值可以省略不写,
//默认值是类名称,首字母小写
//UserService -- userService
@Component(value = "userService") //注解等同于XML配置文件:<bean id="userService" class=".."/>
public class UserService {
public void add() {
System.out.println("service add.......");
}
}
4, detalles de la apertura del ensamblaje de escaneo de configuración
<!--示例 1
use-default-filters="false" 表示现在不使用默认 filter,自己配置 filter
context:include-filter ,设置扫描哪些内容
-->
<context:component-scan base-package="com.atguigu" use-defaultfilters="false">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller"/><!--代表只扫描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"/><!--表示Controller注解的类之外一切都进行扫描-->
</context:component-scan>
5, forma basada en anotacionesInyección de atributos
(1) @Autowired: Montaje automático según tipo de atributo
El primer paso es crear el servicio y los objetos dao, y agregar las anotaciones del objeto de creación a las clases de servicio y dao.
El segundo paso es inyectar el objeto dao en el servicio, agregar el atributo de tipo dao a la clase de servicio y usar anotaciones en los atributos.
@Service
public class UserService {
//定义 dao 类型属性
//不需要添加 set 方法
//添加注入属性注解
@Autowired
private UserDao userDao;
public void add() {
System.out.println("service add.......");
userDao.add();
}
}
//Dao实现类
@Repository
//@Repository(value = "userDaoImpl1")
public class UserDaoImpl implements UserDao {
@Override
public void add() {
System.out.println("dao add.....");
}
}
(2) @Qualifier: Inyectar de acuerdo con el nombre, el uso de esta anotación @Qualifier se usa junto con @Autowired arriba
//定义 dao 类型属性
//不需要添加 set 方法
//添加注入属性注解
@Autowired //根据类型进行注入
//根据名称进行注入(目的在于区别同一接口下有多个实现类,根据类型就无法选择,从而出错!)
@Qualifier(value = "userDaoImpl1")
private UserDao userDao;
(3) @Resource: se puede inyectar según el tipo o según el nombre (pertenece a la anotación del paquete javax y no se recomienda).
//@Resource //根据类型进行注入
@Resource(name = "userDaoImpl1") //根据名称进行注入
private UserDao userDao;
(4) @Value: inyectar atributos de tipo común
@Value(value = "abc")
private String name
6, desarrollo completamente anotado
(1) Cree una clase de configuración para reemplazar el archivo de configuración xml
@Configuration //作为配置类,替代 xml 配置文件
@ComponentScan(basePackages = {
"com.atguigu"})
public class SpringConfig {
}
(2) Clase de prueba de escritura
@Test
public void testService2() {
//加载配置类
ApplicationContext context
= new AnnotationConfigApplicationContext(SpringConfig.class);
UserService userService = context.getBean("userService",
UserService.class);
System.out.println(userService);
userService.add();
}