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

172 篇文章 1 订阅
30 篇文章 0 订阅

1、什么是注解

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

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

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

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

1.@Component

2.@Controller

3.@Repository

4.@Service

上面四个注解的功能都是一样的,都可以用来创建bean对象实例

步骤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();
}
复制代码

运行结果:

image.png

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

image.png

步骤3:代码小进阶

//先创建一个接口UserDao
public interface UserDao {
    void add();
}
复制代码
//再创建一个接口UserDao的实现类UserDaoImp
@Repository
public class UserDaoImp implements UserDao {
    @Override
    public void add() {
        System.out.println("add2()...");
    }
}
复制代码
@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()

运行结果:

image.png

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

步骤4:把握细节

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

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

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

image.png

解决方法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();
    }
}
复制代码

结尾:使用spring5提供的完全注解开发时,首先需要创建一个配置类,这个配置类需要加上两个注解(@Configuration、@ComponentScan),需要注入属性时,要注意当一个接口有多个实现类时,最好使用@Autowired + @Qualifier 的注解方式!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring IOC容器Spring框架的核心部分之一,它负责管理和组织应用程序中的各种组件。IOC是控制反转的意思,它实现了依赖注入(DI)的思想。DI是指通过容器管理和注入组件的依赖关系,而不是手动在代码中创建和管理这些组件。当应用程序需要使用某个组件时,可以直接向IOC容器索取该组件,而不需要自己手动创建或管理。 在Spring中,IOC容器负责管理和组织各种BeanBeanSpring中的基本组件,它可以是任何一个Java对象。IOC容器会根据配置文件或注解来实例化、配置和管理这些Bean。它会在应用程序启动时,根据配置文件或注解的定义,创建并初始化所有的Bean,并将它们存储在容器中。当应用程序需要使用某个Bean时,只需向IOC容器索取即可。 Spring提供了多种IOC容器的实现,包括XML配置的ApplicationContext和基于注解的AnnotationConfigApplicationContext等。这些容器提供了丰富的功能,如依赖注入、AOP、事务管理等。通过使用IOC容器,可以实现松耦合、可扩展和可测试的应用程序。引用<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [SpringIOC容器详解,通俗易懂看这一篇就够了](https://blog.csdn.net/qq_45369589/article/details/123095028)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [详解Spring IOC 容器启动流程分析](https://download.csdn.net/download/weixin_38750209/12747162)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值