1.Component注解

当我们在AccountServiceImpl上面写一个@component注解的时候,他就会把这个类反射创建一个对象,并且存入spring容器中。spring容器时一个map容器,是由key-value组成的,存这个对象,是value。那么key呢?
属性:value:用于指定bean的id,当我们不写时,它的默认值时当前类名,且首字母小写(注意,是当前实现类的类名,而不是接口名)
按照下面代码,我们直接运行是错误的

@Component
public class AccountServiceImpl implements IAccountService {
//1.获取核心容器对象
ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");
//2.根据id获取bean对象
IAccountService as=(IAccountService)ac.getBean("accountServiceImpl");       //第一种,拿到object类型,强转
System.out.println(as);

在这里插入图片描述
当我们解析配置文件时,就会创建容器,从而创建对象,而此时配置是空的,没有定义。在解析配置文件的时候,又是如何知道在哪儿写了注解呢?
前面的时候说过了有5个jar包,其中有一个spring-aop的jar包是现在所要用的。
所以在bean.xml我们需要有一项配置
首先需要在官网导入约束和依赖
告知spring在创建容器时要扫描的包,配置所需要的标签不是在beans的约束中,而是一个名称为context名称空间和约束中

<?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:component-scan base-package="com.yujie"></context:component-scan>

在这里插入图片描述
注解相对xml更为简单一些,因为这里面直接写上一个标签,后来写上一个注解,之后再也不用在bean.xml中配置了,想创建对象就加注解。
如果要加一个id,就用value即可。

@Component(value="accountService")
public class AccountServiceImpl implements IAccountService 

细节:如果一个注解中只有一个value属性,那么value属性的名称时可以不写的

@Component("accountService")

2.Component衍生出的注解

1.用于创建对象的注解
@component:用于把当前对象存入spring容器中
@Controller:一般用在表现层
@Service:一般用在业务层
@Repository:一般用在持久层
以上三个注解,他们的作用和属性与component是一模一样的,换句话说,component能做的事情,他们三个也能做

他们三个是spring框架为我们提供明确三层使用的注解,使我们的三层对象更加清晰。
如果我们随便用,也没有代码的问题,没有一个限制。他们是继承的关系。

@Repository("accountDao")
public class AccountDaoImpl implements IAccountDao 
@Service(value="accountService")
public class AccountServiceImpl implements IAccountService 

如果不属于三层中的任何一层,我们就用component来创建

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐