当我们在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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd">
ssm框架注解的作用、加入这个标签之后,就会扫描这个包下的所有注解
<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")
ssm框架的dao层需要注解吗。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来创建
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态