简单了解Spring 的注解
简单了解Spring 的注解
不会再一纸一梦一笙 发表于7个月前
简单了解Spring 的注解
  • 发表于 7个月前
  • 阅读 7
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

在学习spring注解的时候,刚开始是不理解的。不明白其中的原理,之后仔细想了想,敲了一遍代码之后,

就明白了其中的原理,当然只是一些简单的常用的注解,拿出来分享一下,希望对您有所帮助,毕竟第一次

写博客。不足之处,还望见谅。

首先,Spring两大核心亮点就是IOC容器以及AOP切面编程。
所谓的IOC容器,也叫控制反转或者DI(依赖注入),简单理解,其特点就是不用程序员自己创建对象以及

给创建的对象赋值。

在没有使用注解的时候,我们都是在applicationContext.xml的配置文件中

<bean id="" class=""/>来自动生成对象。也就是说,我们还要在配置文件中写bean标签来实现对象。

但是使用了注解之后,生成对象,我们就不用写bean了,减少了代码。

介绍的注解:

@Repository:一般写到dao上面:创建对象
@Service:一般写到Service上面:创建对象
@Resource和 @Autowired:赋值
@Controller:控制层
@Component:当不知道是什么类型时,就可以写这个,这个是其他注解的父类,一般用来标注实体类

参考代码:模拟了控制层,业务层,还有dao数据访问层

模拟控制层代码:

@Controller("control")
/**
 * 表示控制层:括号里面的“ ”,相当于原xml配置文件<bean id="control" class="">中的id。用来表

示创建对象的id
 * 具体怎么用,看后面的测试代码
 * @author wordxiao123
 *
 */
public class MyController
{
    @Resource
    //就是用来自动赋值的,后面什么也不写,表示按照service这个名字,查找id=service 的类,然

后实现service对象。
    //这个标签==@Autowrie标签,但是@Resource有两个属性,分别可以按照name和type在spring容器

中查找。
    private IUsersService service;
    
    //这个方法就是调用service对象的方法,返回一个字符串。
    public String returnStr(){
        
        return service.returnStr();
    }
}


模拟业务层的接口

public interface IUsersService
{
    /* 返回字符串*/
    String  returnStr();
}

模拟业务层接口的实现类

 

/**
 * @Service("service")
 * <bean id="service" class="">
 *
 * @author wordxiao123
 */
@Service("service")
//这里的service,正好是控制层中要查找的service,所以找到了,就自动创建service的对象。
public class UsersServiceImpl implements IUsersService
{
    /**
     * <property name="studentDao" ref="studentDao"/>
     * @Resource(name = "studentDao")
     *
     * 如果传了name,默认会按照name指定的名称到Spring的容器中查询对象,
     * 如果不传name;默认会按照IAStudentDao变量名到Spring的容器中查询对象,
     * 如果按照name找不到,按照类型去找,包含了@Autowired的功能
     * 强烈建议使用@Resource
     *
     *
     * @Autowired:只会按照类型去匹配,
     * 如果有两个类型一模一样的对象,就无法赋值成功
     */
    @Resource
    //同理,赋值,查找id为studentDao的类,实例化。
    private IAStudentDao studentDao;
    
    @Override
    public String returnStr()
    {
        return studentDao.returnStr();
    }

}


模拟dao层的接口


public interface IAStudentDao
{
    /* 返回一个字符串 */
    String returnStr();
}


模拟dao层的实现类

/**
 * 仓库
 * @Repository("studentDao")
 * <bean id="studentDao" class=""></bean>
 *
 * 小括号里面的字符串表示什么含义?
 * 对象的id,
 *
 * @author WangshSxt
 */
@Repository("studentDao")
//这也是前面要查找的("studentDao"),找到后,自动创建实例
public class AStudent2DaoImpl implements IAStudentDao
{

    @Override
    public String  returnStr()
    {
        return ("========save()=====");
    }
    
}

 

测试类(测试代码主要)

    
    @Test
    public void test()
    {
        MyController m = (MyController)ac.getBean("control");
        String string = m.returnStr();
        System.out.println("UsersServiceTest.save()"+string);
    }


还有applicationContext.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:p="http://www.springframework.org/schema/p"
    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"

    default-autowire="byName">
    
    <!--
        注解:是写在类里面的
        一定要先告诉Spring,去哪个包里面的哪些类扫描注解
        
        不需要提供读写器:
     -->
    <context:component-scan base-package="cn.sxt.mybatis"/>
</beans>

共有 人打赏支持
粉丝 0
博文 1
码字总数 942
评论 (0)
×
不会再一纸一梦一笙
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: