【Spring】IOC容器之注解方式管理Bean


Bean的管理包含两方面,一是创建Bean对象,二是注入属性,在上一节已经说明了 XML方式管理Bean,本节使用注解进行Bean的管理。

一、注解

1.什么是注解?
(1)注解是代码特殊标记,语法格式:@注解名称(属性名称=属性值,属性名称=属性值..)
(2)使用注解,注解作用在类上面,方法上面,属性上面
(3)使用注解目的:简化xml配置
2.Spring实现Bean管理的常用注解

名称作用
@Component将Spring中的类标注为注解,可以用在任何层次(一般不使用)
@Repository将数据访问层(DAO层)的类标识为Spring中的Bean
@Service将业务层(Service层)的类标识为Spring中的Bean
@Controller将控制层(Controller层)的类标识为Spring中的Bean
@Autowired对Bean的属性变量、属性的setter方法进行标注,按照Bean的类型进行转配
@Resource作用与@Autowired一样,区别是@Resource默认按照Bean的名称进行装配,@Resource有两个属性name和type,Spring将name属性解析为Bean实例名称,type属性解析为Bean的实例类型
@Qualifier标注在属性上,根据属性名称进行属性注入
@Value标注在属性上,注入普通属性

二、注解方式管理Bean

使用注解方式实现对Bean的管理,需要在原本的基础上引入aop的jar包,具体如下共6个:
在这里插入图片描述
创建对象和注入属性,过程演示如下:

//UserDao接口
public interface UserDao {
    public void say();
}
//UserService接口
public interface UserService {
    public void say();
}
//UserDao的实现类UserDaoImpl 
//不添加value属性,默认是类名的首字母小写
@Repository(value = "userDao")
public class UserDaoImpl implements UserDao {
    @Override
    public void say() {
        System.out.println("userDao say Hello World...");
    }
}
//UserService接口实现类UserServiceImpl 
@Service(value = "userService")
public class UserServiceImpl implements UserService {
    //@Resource(name = "userDao")
    @Autowired
    @Qualifier(value = "userDao")//必须配合@Autowired才可以使用,单独使用会报错:NullPointerException
    private UserDao userDao;//使用注解方式注入属性时不需要setter方法
    @Value(value = "独孤求败")//使用@Value注解注入普通属性
    private String name;
    @Override
    public void say() {
        this.userDao.say();
        System.out.println("userService say Hello World...");
        System.out.println("name = "+name);
    }
}

配置文件beans.xml

<?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">
    <!--开启注解扫描,需要使用context命名空间,注意配置-->
    <!--开启注解扫描,此时base-package属性下的子包中使用注解标注的类和属性都会自动诶Spring识别-->
    <!--开启注解扫描,若多个包不在同一个父包下,可以使用“,”将多个包分隔开-->
    <context:component-scan base-package="com.jd.annotation"></context:component-scan>
</beans>

测试:

@Test
public void annTest(){
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
    UserService userService = (UserService) applicationContext.getBean("userService");
    System.out.println(userService);
    userService.say();
}

在这里插入图片描述
扩展:
在上述的Spring配置文件中,base-package属性配置的包下的类和属性都会被扫描,为了提高效率,可以设置那些需要扫描,那些不需要扫描,具体如下:
在这里插入图片描述

知识延伸:完全注解开发

完全注解开发是指不需要Spring配置文件,使用配置类替代配置文件,具体如下:
(1)编写配置类,代替Spriing的配置文件;

//配置类,功能和上面的beans.xml功能相同
@Configuration//作为配置类,替代配置文件
@ComponentScan(basePackages = {"com.jd.annotation"})
public class SpringConfig {
}

(2)编写实现类
实现类就是上述的UserDao接口UserService接口UserDao实现类UserDaoImplUserService实现类UserServiceImlp
(3)测试类

@Test
public void allAnnotationTest(){
	//使用注解类后,创建Spring容器时,使用AnnotationConfigApplicationContext(SpringConfig.class)
    ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
    UserService userService = (UserService) applicationContext.getBean("userService");
    System.out.println(userService);
    userService.say();
}

在这里插入图片描述
完全注解开发了解即可,实际就是Spring Boot开发,关于Spring Boot技术后续会说明。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智商三岁半i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值