关于spring web-mvc衍生注解

 更新时间:2022年08月19日 10:33:45   作者:深浅Java  
这篇文章主要介绍了关于spring web-mvc衍生注解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

衍生注解

在web开发中,会根据webmvc的三层加购分层,这时候每层都有相同一个不同的注解名字,但功能都相同。

  • Service层:@Service用于标注业务层组件
  • controller层:@Controller用于标注控制层组件
  • dao层:@Repository用于标注数据访问组件
  • 组件归类层,名字可以随便定义,例如User层,@Component可以进行标注

注解:使用了注解之后,在容器中不需要注入bean,但要指定查找的的项目。

容器配置

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
      <!--指定注入时需要查找的项目-->
       <context:component-scan base-package="com.yc.ch"/>
</beans>

创建一个dao层和一个组件归类层,文件样式如下

dao和pojo

User类

import com.yc.dao.Userdao;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
//该注释表示注册到容器中,直接由spring容器托管,
@Component
public class User {
    //表示设置name的参数值为为Tom
    //等价于 <property name="name" value="Tom"/>
    @Value("Tom")
    private String name;
    private Userdao userdao;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Userdao getUserdao() {
        return userdao;
    }
    public void setUserdao(Userdao userdao) {
        this.userdao = userdao;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", userdao=" + userdao +
                '}';
    }
}

Userdao类

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
//该注释表示注册到容器中,直接由spring容器托管,
@Repository
public class Userdao {
    //表示设置name的参数值为为游泳
    //等价于 <property name="name" value="游泳"/>
    @Value("游泳")
    private  String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Userdao{" +
                "name='" + name + '\'' +
                '}';
    }
}

spring容器配置

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
        
       <!--表示查找到com.yc下的所有层-->
       <context:component-scan base-package="com.yc"/>
</beans>

创建测试类

ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
User u=context.getBean("user",User.class);
System.out.println(u);

输出

User{name=‘Tom’, userdao=null}

最终输出的只有User类,但是Userdao层次却直接显示空,问题是没有把Userdao的bean引入到User的bean中,所以在测试User类时显示空。解决:使用使用注解 @Autowired方式匹配到Userdao中

将User类修改

import com.yc.dao.Userdao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class User {
    @Value("Tom")
    private String name;
    @Autowired
    private Userdao userdao;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Userdao getUserdao() {
        return userdao;
    }
    public void setUserdao(Userdao userdao) {
        this.userdao = userdao;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", userdao=" + userdao +
                '}';
    }
}

修改spring容器配置

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
       <context:component-scan base-package="com.yc"/>
       <context:annotation-config/>
</beans>

创建测试类,输出

User{name=‘Tom’, userdao=Userdao{name=‘游泳’}}

@Component使用

@Component还可以加参数,里面值相当于注入bean中的id值,上面的案例默认为User类的小写user,如果设置为@Component(value = “user2”)或者@Component(“user2”),则将测试类改写为

  ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
        User u=context.getBean("user2",User.class);
        System.out.println(u);

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • maven国内镜像配置的方法步骤

    maven国内镜像配置的方法步骤

    这篇文章主要介绍了maven国内镜像配置的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 如何获取包下所有类中的注解的值(java工具类)

    如何获取包下所有类中的注解的值(java工具类)

    这篇文章主要介绍了如何获取包下所有类中的注解的值 (java工具类),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java中Map的用法详解

    Java中Map的用法详解

    将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口
    2016-05-05
  • java实现验证码类生成中文验证码

    java实现验证码类生成中文验证码

    java实现的汉字输入验证码,主要包含两个类,一个是生成验证码,一个是判断验证码输入是否正确,实现原理非常简单,将汉字和干扰线生成图片并将汉字保存到session,前台获取每次生成验证码图片并用文本框值和session值比较,功能就怎么简单
    2014-01-01
  • 图解Java线程的生命周期

    图解Java线程的生命周期

    本文主要介绍了Java中线程的5种状态(新建(New)、就绪(Runable)、运行(Running)、阻塞(Blocked)和死亡(Dead))之间的转换图解,有需要的朋友可以参考下
    2014-10-10
  • springboot中自定义异常以及定制异常界面实现过程解析

    springboot中自定义异常以及定制异常界面实现过程解析

    这篇文章主要介绍了springboot中自定义异常以及定制异常界面实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Spring boot如何配置请求的入参和出参json数据格式

    Spring boot如何配置请求的入参和出参json数据格式

    这篇文章主要介绍了spring boot如何配置请求的入参和出参json数据格式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java如何获取主机的基本信息详解

    Java如何获取主机的基本信息详解

    最近遇到一个工作需求,上网查了一下怎样在Java中获取本机的ip和主机名,所以下面这篇文章主要给大家介绍了关于Java如何获取主机的基本信息,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-12-12
  • java元注解@Inherited的使用详解

    java元注解@Inherited的使用详解

    这篇文章主要介绍了java元注解@Inherited的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • SpringBoot整合SpringSecurity实现认证拦截的教程

    SpringBoot整合SpringSecurity实现认证拦截的教程

    我们写的任何一个项目,都应该有安全防护,不应该让这个项目进行“裸奔”,否则很容易被别人进行攻击。而在SpringBoot环境中,其实可以很容易实现安全保护,本文给大家介绍SpringBoot如何整合SpringSecurity实现认证拦截,需要的朋友可以参考下
    2023-05-05

最新评论