Spring是一个轻量级的IoC和AOP容器框架,是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求,下面这篇文章主要给大家介绍了关于Spring更简单的存储方式与获取方式的相关资料,需要的朋
存储方式(注解)
使用注解的方式存储业务对象到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存储与获取方式内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:Spring更简单的存储方式与获取方式详解
基础教程推荐
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- java基础知识之FileInputStream流的使用 2023-08-11
- springboot自定义starter方法及注解实例 2023-03-31
- Java数据结构之对象比较详解 2023-03-07
- java实现多人聊天系统 2023-05-19
- Java文件管理操作的知识点整理 2023-05-19
- Java实现查找文件和替换文件内容 2023-04-06
- Java并发编程进阶之线程控制篇 2023-03-07
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- Java实现线程插队的示例代码 2022-09-03