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

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


相关文章
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
1066 26
|
9月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
9月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
784 2
|
XML Java 数据格式
Spring IoC容器的设计与实现
Spring 是一个功能强大且模块化的 Java 开发框架,其核心架构围绕 IoC 容器、AOP、数据访问与集成、Web 层支持等展开。其中,`BeanFactory` 和 `ApplicationContext` 是 Spring 容器的核心组件,分别定位为基础容器和高级容器,前者提供轻量级的 Bean 管理,后者扩展了事件发布、国际化等功能。
402 18
|
XML Java 数据格式
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
630 12
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
881 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
XML Java 开发者
经典面试---spring IOC容器的核心实现原理
作为一名拥有十年研发经验的工程师,对Spring框架尤其是其IOC(Inversion of Control,控制反转)容器的核心实现原理有着深入的理解。
1064 3
|
XML Java 数据格式
Spring5入门到实战------8、IOC容器-Bean管理注解方式
这篇文章详细介绍了Spring5框架中使用注解进行Bean管理的方法,包括创建Bean的注解、自动装配和属性注入的注解,以及如何用配置类替代XML配置文件实现完全注解开发。
Spring5入门到实战------8、IOC容器-Bean管理注解方式
|
XML Java 数据格式
Spring IOC容器的深度解析及实战应用
【10月更文挑战第14天】在软件工程中,随着系统规模的扩大,对象间的依赖关系变得越来越复杂,这导致了系统的高耦合度,增加了开发和维护的难度。为解决这一问题,Michael Mattson在1996年提出了IOC(Inversion of Control,控制反转)理论,旨在降低对象间的耦合度,提高系统的灵活性和可维护性。Spring框架正是基于这一理论,通过IOC容器实现了对象间的依赖注入和生命周期管理。
378 0