欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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();
    }
}

运行:
Spring5学习笔记__03
总结:注解需要使用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();
    }

Spring5学习笔记__03

3、Spring 提供 IOC 容器实现两种方式:(两个接口)
(1)BeanFactory:IOC 容器基本实现,是 Spring 内部的使用接口,不提供开发人员进行使用

  • 加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象
    (2)ApplicationContext:BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人
    员进行使用
  • 加载配置文件时候就会把在配置文件对象进行创建