Spring更简单的存储方式与获取方式详解

目录
  • 存储方式(注解)
    • @Controller
    • @Service
    • @Repository
    • @Configuration
    • @Component
    • 方法注解@Bean
      • 重命名bean
  • 五大注解之间的关系
  • 从Spring中获取对象
    • @Autowired
    • 注入注解
      • 三种注入的优缺点
    • @Resource
  • @Autowired和@Resource的区别
  • 总结

存储方式(注解)

使用注解的方式存储业务对象到Spring中会更简单

1.配置spring.xml设置spring存入对象的根路径 ,目的是让Spring项目启动后,能够去根路径下的所有类中扫描并标识为需要存储到Spring中的对象存储到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:content="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 https://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 配置一下:bean注解扫描的根路径(方面后面更简单存储对象到spring容器)-->
    <content:component-scan base-package="com.bit"></content:component-scan>
</beans>

2.使用注解将bean对象存储到spring框架中

注解分类:

1.类注解:@Controller【控制器】,@Service【业务逻辑层】,@Repository【数据持久层】,@Component【组件类】,@Configuration【配置类】

2.方法注解:@Bean(必须配合类注解使用)

@Controller

创建bean对象

package com.bit;

import org.springframework.stereotype.Controller;

/**
 * Description:
 * User: lmp
 * Date: 2022-05-24
 * Time: 19:23
 */
@Controller
public class UserController {
    public void sayHi(String name){
        System.out.println("Hi controller"+name);
    }
}

读取bean对象

package com.bit;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Description:
 * User: lmp
 * Date: 2022-05-24
 * Time: 15:25
 */
public class App {
    public static void main(String[] args) {
        //先获取对象的Spring
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        //从 Spring 中获得存入的对象(将存入的类首字母小写,若类名字符大于2个,并且前两个字符都是大写,那么使用原类名作为bean的名字)
        UserController userController = context.getBean("userController",UserController.class);
        userController.sayHi("Bit");
    }
}

@Service

和controller一样

@Repository

和controller一样

@Configuration

和controller一样

@Component

和controller一样

方法注解@Bean

一般写在组件里面,方法注解必须配合类注解使用,因为Spring默认是类级别的扫描

package com.bit.util;

import com.bit.Model.User;
import com.sun.org.apache.bcel.internal.generic.RETURN;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * Description:
 * User: lmp
 * Date: 2022-05-24
 * Time: 21:14
 */
@Component
public class UserBean {
    @Bean //将当前对象存储在Spring当中
    public User user1(){
        User user = new User();
        user.setId(1);
        user.setName("zhangsan");
        user.setAge(18);
        return user;
    }
}

重命名bean

可以通过设置name属性给Bean对象进行重命名操作

@Bean重命名可以有多个别名,但是当指定别名之后,方法名就取不到对象了

package com.bit.util;

import com.bit.Model.User;
import com.sun.org.apache.bcel.internal.generic.RETURN;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * Description:
 * User: lmp
 * Date: 2022-05-24
 * Time: 21:14
 */
@Component
public class UserBean {
    @Bean(name = {"u1","userInfo1"}) //将当前对象存储在Spring当中
    public User user1(){
        User user = new User();
        user.setId(1);
        user.setName("zhangsan");
        user.setAge(18);
        return user;
    }

    @Bean(name = "u2") //将当前对象存储在Spring当中
    public User user2(){
        User user = new User();
        user.setId(1);
        user.setName("lisi");
        user.setAge(18);
        return user;
    }
}

五大注解之间的关系

从业务逻辑来说,@Controller是@Component的子类,同样,@Service,@Repository,@Configuration都是@Component的子类

从Spring中获取对象

@Autowired

属性注入(属性注册)

Setter注入

构造方法注入

注入注解

@Qualifier 可以解决同一个类有两个以上的对象的情况,可以使用这个注解,它相当于@Resource(name=“”)

三种注入的优缺点

  • 属性注入的优点是简洁,只适用于IoC容器,如果非IOC容器不可用,会报空指针异常
  • 构造方法注入是Spring推荐的注入方式,缺点是如果有多个注入会显得比较臃肿
  • Setter方式是Spring前期版本推荐的注入方式,但通用性不如构造方法,

@Resource

对象注入的另一种方式:使用@Resource注解,但Resource注解不能使用在构造方法上

@Autowired和@Resource的区别

1.出身不同,他们所属的包不一样,Resource属于javajdk中的javax包中,而Autowired属于springframework包中的

2.作用范围不同,Resource不可以使用在构造方法注解上,而autowired可以

3.功能不同 Resource可以使用name属性,从而完成对象的别名注入,而autowired没有。

总结

到此这篇关于Spring更简单的存储方式与获取方式的文章就介绍到这了,更多相关Spring存储与获取方式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • springboot中的springSession的存储和获取实现

    利用redis进行springSession的存储: 存储: // 在session中保存用户信息 HttpSession session = httpRequest.getSession(true); session.setAttribute(Constants.SESSION_KEY_USER + userToken, user); // 存储sessionId redisService.hmSet(Constants.SESSION_ID_KEY , userToken, session.

  • Spring更简单的存储方式与获取方式详解

    目录 存储方式(注解) @Controller @Service @Repository @Configuration @Component 方法注解@Bean 重命名bean 五大注解之间的关系 从Spring中获取对象 @Autowired 注入注解 三种注入的优缺点 @Resource @Autowired和@Resource的区别 总结 存储方式(注解) 使用注解的方式存储业务对象到Spring中会更简单 1.配置spring.xml设置spring存入对象的根路径 ,目的是让Sprin

  • Spring AOP拦截-三种方式实现自动代理详解

    这里的自动代理,我讲的是自动代理bean对象,其实就是在xml中让我们不用配置代理工厂,也就是不用配置class为org.springframework.aop.framework.ProxyFactoryBean的bean. 总结了一下自己目前所学的知识. 发现有三种方式实现自动代理 用Spring一个自动代理类DefaultAdvisorAutoProxyCreator: <bean class="org.springframework.aop.framework.autoproxy.

  • Spring jdbc中数据库操作对象化模型的实例详解

    Spring jdbc中数据库操作对象化模型的实例详解 Spring Jdbc数据库操作对象化 使用面向对象方式表示关系数据库的操作,实现一个线程安全可复用的对象模型,其顶级父类接口RdbmsOperation. SqlOperation继承该接口,实现数据库的select, update, call等操作. 1.查询接口:SqlQuery 1) GenericSqlQuery, UpdatableSqlQuery, MappingSqlQueryWithParameter 2) SqlUpda

  • Spring Cloud 覆写远端的配置属性实例详解

    应用的配置源通常都是远端的Config Server服务器,默认情况下,本地的配置优先级低于远端配置仓库.如果想实现本地应用的系统变量和config文件覆盖远端仓库中的属性值,可以通过如下设置: spring: cloud: config: allowOverride: true overrideNone: true overrideSystemProperties: false overrideNone:当allowOverride为true时,overrideNone设置为true,外部的配

  • Java中map遍历方式的选择问题详解

    1. 阐述 对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多.理由是:entrySet方法一次拿到所有key和value的集合:而keySet拿到的只是key的集合,针对每个key,都要去Map中额外查找一次value,从而降低了总体效率.那么实际情况如何呢? 为了解遍历性能的真实差距,包括在遍历key+value.遍历key.遍历value等不同场景下的差异,我试着进行了一些对比测试. 2. 对比测试 一开始只进行了简单的测试,但结果却表明k

  • Spring解密之XML解析与Bean注册示例详解

    为什么开始看spring的源码 半路转行写代码快一年半了,从开始工作就在使用spring框架,虽然会用,会搭框架,但是很多时候不懂背后的原理,比如:spring是怎样控制事务的,springmvc是怎样处理请求的,aop是如何实现的...这让人感觉非常不踏实,那就开始慢慢边看书边研究spring的源码吧!!! 怎样高效的看源码 我的答案是带着具体的问题去看源码,不然非常容易陷入源码细节中不能自拔,然后就晕了,最后你发现这看了半天看的是啥玩意啊. 引言 Spring是一个开源的设计层面框架,解决了

  • Volley源码之使用方式和使用场景详解

    概述 Volley是Google在2013年推出的一个网络库,用于解决复杂网络环境下网络请求问题.刚推出的时候是非常火的,现在该项目的变动已经很少了.项目库地址为https://android.googlesource.com/platform/frameworks/volley 通过提交历史可以看到,最后一次修改距离今天已经有一段时间了.而volley包的release版本也已经很久没有更新了. author JeffDavidson<jpd@google.com> SunMar1316:3

  • 使用Spring Boot搭建Java web项目及开发过程图文详解

    一.Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者.SpringMVC是非常伟大的框架,开源,发展迅速.优秀的设计必然会划分.解耦.所以,spring有很多子项目,比如core.context.

  • Spring Security 实现用户名密码登录流程源码详解

    目录 引言 探究 登录流程 校验 用户信息保存 引言 你在服务端的安全管理使用了 Spring Security,用户登录成功之后,Spring Security 帮你把用户信息保存在 Session 里,但是具体保存在哪里,要是不深究你可能就不知道, 这带来了一个问题,如果用户在前端操作修改了当前用户信息,在不重新登录的情况下,如何获取到最新的用户信息? 探究 无处不在的 Authentication 玩过 Spring Security 的小伙伴都知道,在 Spring Security 中

  • Java Http请求方式之RestTemplate常用方法详解

    目录 引言 常见用法 简单Get\Post请求 Post提交常规表单 Post上传文件 配置项 请求添加Cookie\Header 配置请求工厂 超时.代理 配置拦截器.转换器,错误处理 错误重试(额外) SSL请求 基于RestTemplate一些工具 钉钉机器人通知 总结 引言 在开发中有时候经常需要一些Http请求,请求数据,下载内容,也有一些简单的分布式应用直接使用Http请求作为跨应用的交互协议. 在Java中有不同的Http请求方式,主要就是HttpURLConnection或者Ap

随机推荐