Spring 使用注解开发


Posted in Java/Android onMay 20, 2022

在Spring4之后 要使用注解开发 必须保证aop包导入了

Spring 使用注解开发

使用注解需要导入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
        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:annotation-config/>
</beans>

@Component:组件放在类上 说明这个类被Spring管理了 就是bean

import org.springframework.stereotype.Component;
//等价于<bean id="user" class="com.kero.pojo.User"/>
@Component
public class User {
    public String name = "xxx";
}

@Value

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
//等价于<bean id="user" class="com.kero.pojo.User"/>
@Component
public class User {
    @Value("xxx")
//等价于<property name="name" value="xxx"/>
    public String name;
}

或者

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
//等价于<bean id="user" class="com.kero.pojo.User"/>
@Component
public class User {  
    public String name;
    @Value("xxx")
    public void setName(String name) {
        this.name = name;
    }
}

@Component有几个衍生的注解 我们在Web开发中会按照MVC三层架构分层

·dao[@Repository]

·service[@Service]

·controller[@Controller]

这四个注解功能一样 都是代表将某个类注册到Spring中 装配Bean

Spring 使用注解开发

Spring 使用注解开发

Spring 使用注解开发

注解的作用域@Scope

@Scope 放在类上,默认是单例模式

@Scope(prototype)是原型模式,每次创建的都是一个新的对象

Spring 使用注解开发

其作用等价于

Spring 使用注解开发

补充:

@Scope("singleton") 或者@Scope 单例模式 下面代码输出结果为true

@Scope("prototype")下面代码输出结果为false

import com.kero.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
    public static void main(String[] args) {
       ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = context.getBean("user", User.class);
        User user2 = context.getBean("user", User.class);
        System.out.println(user==user2);
    }
}

xml vs 注解

·xml更加万能 适用于任何场合 维护简单方便

·注解 不是自己类使用不聊 维护相对复杂

最佳实践:xml用来管理bean

注解只负责完成属性的注入

我们在使用的过程中 需要注意 使用以下代码

<!--指定要扫描的包 这个包下的注解就会生效->-->
    <context:component-scan base-package="com.kero"/>
    <!--开启注解的支持-->
    <context:annotation-config/>

针对最佳实践的例子

<?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.kero"/>
    <!--开启注解的支持-->
    <context:annotation-config/>
    <bean id="user" class="com.kero.pojo.User" scope="prototype"/>
</beans>
import org.springframework.beans.factory.annotation.Value;
public class User {
    @Value("XXX")
    public String name;
    public void setName(String name) {
        this.name = name;
    }
}

到此这篇关于Spring详解使用注解开发流程的文章就介绍到这了!


Tags in this post...

Java/Android 相关文章推荐
SpringAop日志找不到方法的处理
Jun 21 Java/Android
springboot拦截器无法注入redisTemplate的解决方法
Jun 27 Java/Android
mybatis 解决从列名到属性名的自动映射失败问题
Jun 30 Java/Android
JavaWeb Servlet实现网页登录功能
Jul 04 Java/Android
一篇文章带你学习Mybatis-Plus(新手入门)
Aug 02 Java/Android
JavaCV实现照片马赛克效果
Jan 22 Java/Android
Java如何实现通过键盘输入一个数组
Feb 15 Java/Android
SpringBoot中获取profile的方法详解
Apr 08 Java/Android
Java 数组的使用
May 11 Java/Android
Android中的Launch Mode详情
Jun 05 Java/Android
Spring Boot项目如何优雅实现Excel导入与导出功能
Jun 10 Java/Android
Java中的Kafka为什么性能这么快及4大核心详析
Sep 23 Java/Android
MyBatis核心源码深度剖析SQL语句执行过程
Java 轮询锁使用时遇到问题
May 11 #Java/Android
Java 死锁解决方案
May 11 #Java/Android
JAVA springCloud项目搭建流程
May 11 #Java/Android
Java死锁的排查
May 11 #Java/Android
Java线程的6种状态与生命周期
May 11 #Java/Android
Java 多线程协作作业之信号同步
May 11 #Java/Android
You might like
Terran兵种对照表
2020/03/14 星际争霸
纯PHP生成的一个树叶图片画图例子
2014/04/16 PHP
Yii Framework框架获取分类下面的所有子类方法
2014/06/20 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
javascript html 静态页面传参数
2009/04/10 Javascript
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
Chrome中模态对话框showModalDialog返回值问题的解决方法
2010/05/25 Javascript
JavaScript 事件系统
2010/07/22 Javascript
实现点击列表弹出列表索引的两种方式
2013/03/08 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
node.js中的http.response.write方法使用说明
2014/12/14 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
2016/05/09 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
Javascript 链式作用域详细介绍
2017/02/23 Javascript
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
node实现登录图片验证码的示例代码
2018/04/20 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
js实现简易ATM功能
2020/10/27 Javascript
PYcharm 激活方法(推荐)
2020/03/23 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
使用layui实现左侧菜单栏及动态操作tab项的方法
2020/11/10 HTML / CSS
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
出资证明书范本(标准版)
2014/09/24 职场文书
2015年社区中秋节活动总结
2015/03/23 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
Java 在生活中的 10 大应用
2021/11/02 Java/Android
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers
Docker部署Mysql8的实现步骤
2022/07/07 Servers