Spring框架----用于创建对象的Component注解
当我们在AccountServiceImpl上面写一个@component注解的时候,他就会把这个类反射创建一个对象,并且存入spring容器中。spring容器时一个map容器,是由key-value组成的,存这个对象,是value。注解相对xml更为简单一些,因为这里面直接写上一个标签,后来写上一个注解,之后再也不用在bean.xml中配置了,想创建对象就加注解。当我们解析配置文件时,就会创建
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来创建
更多推荐
所有评论(0)