spring IOC容器操作Bean管理——完全注解方式

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: spring IOC容器操作Bean管理——完全注解方式

1、什么是注解

1.注解是代码的特殊标记,格式:@注解名称(属性名=属性值,属性名=属性值)


2.使用注解,可以作用在类上面、方法上面、属性上面


3.使用注解的目的:简化xml配置文件


2、创建Bean对象可以使用的注解

1.@Component


2.@Controller


3.@Repository


4.@Service


上面四个注解的功能都是一样的,都可以用来创建bean对象实例,把这些对象放在IOC容器里


步骤1:创建一个配置类


//替代xml配置文件,表示MyConfig是一个配置类
@Configuration
//开启包扫描功能,basePackages表明要扫描哪个包下的类
@ComponentScan(basePackages = "day01.demo1")
public class MyConfig {
}


步骤2:代码初体验


@Component() //相当于xml配置文件 <bean id = "a"></bean>,可以不写,默认是类名的首字母小写
public class A {
    public void hello(){
        System.out.println("你好呀");
    }
}


下面来通过spring的方式来获取 A 的对象,并调用其方法hello()


@Test

public void test(){
    ApplicationContext context = 
            new AnnotationConfigApplicationContext(MyConfig.class);
    A bean = context.getBean("a", A.class);
    bean.hello();
}


运行结果:


如果 @Component(value = “Hello”)的value属性值改变,context调用getBean()方式时,上述代码的"a"也就应该改为value对应的属性值"Hello",否则就会报下图的错误:


步骤3:代码小进阶


//先创建一个接口UserDao
public interface UserDao {
    void add();
}


//先创建一个接口UserDao
public interface UserDao {
    void add();
}


@Service
public class UserService {
    @Autowired
    //此注解是根据属性类型进行自动装配
    private UserDao userDao;
    public void fun1(){
        System.out.println(userDao);
        userDao.add();
    }
}


@Test
public void test1(){
    ApplicationContext context =
            new AnnotationConfigApplicationContext(MyConfig.class);
    UserService userService = context.getBean("userService", UserService.class);
    userService.fun1();
}


上述代码执行流程:

从IOC容器中获取类UserService的实例,然后调用其方法fun1();同时,也会从IOC容器中创建类UserDaoImp的实例,然后输出userDao对象,最后userDao调用重写后的方法add()


运行结果:



需要注意的是,因为接口不能实例化,所以不能给UserDao添加注解,而是应该在其实现类上添加创建对象的注解(四个注解中的任何一个即可)


步骤4:把握细节


再创建一个UserDao接口的实现类UserDaoImpl


@Repository
//UserDao接口的另一个实现类
public class UserDaoImpl implements UserDao {
    @Override
    public void add() {
        System.out.println("add()...");
    }
}


需要注意的是,当一个接口有多个实现类的时候,使用@Autowired就会报如下异常:


解决方法1:可以和@Qualifier一起使用


@Service
public class UserService {
    @Autowired
    @Qualifier(value = "userDaoImpl")
    //@Qualifier注解根据名称注入,value值是该类的注解中的value值
    private UserDao userDao;
    public void fun1(){
        System.out.println(userDao);
        userDao.add();
    }
}


解决方法2:使用@Resource注解


@Service
public class UserService {
    @Resource(name = "userDaoImpl1")//此注解相当于@Autowired 和 @Qualifier注解,来自于javax,不建议使用
    private UserDao userDao;
    public void fun1(){
        System.out.println(userDao);
        userDao.add();
    }
}


相关文章
|
26天前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
48 0
|
1月前
|
XML JSON Java
SpringBoot必须掌握的常用注解!
SpringBoot必须掌握的常用注解!
56 4
SpringBoot必须掌握的常用注解!
|
12天前
|
前端开发 Java Spring
探索Spring MVC:@Controller注解的全面解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序的基石之一。它不仅简化了控制器的定义,还提供了一种优雅的方式来处理HTTP请求。本文将全面解析`@Controller`注解,包括其定义、用法、以及在Spring MVC中的作用。
27 2
|
1月前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
42 1
|
29天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
35 0
|
1月前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
17 0
|
25天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
80 2
|
1天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
114 77
|
3天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
22 3
|
15天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
43 5