揭阳网站制作软件,python网站开发前端,天元建设集团有限公司建设租赁分公司,sem是什么的缩写文章目录Spring更简单的读取和存储对象1. 存储Bean对象1.1 前置工作#xff1a;配置扫描路径1.2 添加注解存储Bean对象1.2.1 Controller(控制器存储)1.2.2 Service(服务存储)1.2.3 Repository(仓库存储)1.2.4 Component(组件存储)1.2.5 Configuration1.3 为什么要这么多类注解…
文章目录Spring更简单的读取和存储对象1. 存储Bean对象1.1 前置工作配置扫描路径1.2 添加注解存储Bean对象1.2.1 Controller(控制器存储)1.2.2 Service(服务存储)1.2.3 Repository(仓库存储)1.2.4 Component(组件存储)1.2.5 Configuration1.3 为什么要这么多类注解1.3.1 类注解之间的关系1.3.2 Bean命名规则1.4 方法注解1.4.1 方法注解要配合类注解来使用1.4.2 重命名Bean2. 获取Bean对象对象装配2.1 属性注入2.2 构造方法注入2.3 Setter注入2.4 三种注入的优缺点2.5 Resource另一种注入关键字2.6 同一个类型多个Bean报错3. 总结Spring更简单的读取和存储对象
我们现在已经可以实现基本的Spring读取和存储对象的操作了但在操作过程当中。我们发现并没有那么简单。在Spring当中想要更简单的存储和使用对象的核心是使用注解接下了就了解下如何使用注解来存储和获取Bean
1. 存储Bean对象
之前存储Bean对象需要添加一行bean才能注册如下图所示 而现在只需要一个注解就可以代替一行的配置但是我们先要来点准备工作
1.1 前置工作配置扫描路径
注意想要把Bean成功的存储到Spring当中我们需要配置一下存储对象的扫描包路径只有被配置的包下的所有类添加了注解才能被正确识别并保存到Spring当中
在spring-config.xml当中添加如下配置
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contenthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://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.xsdcontent:component-scan base-packagecom.example.beans/content:component-scan
/beans圈起来的是扫描路径表示所有要存放到Spring中的Bean的根目录
1.2 添加注解存储Bean对象
想要将对象存储到Spring当中有两种注解类型可以实现
类注解Controller Service Repository Component Configuration方法注解Bean
接下来分别来看
1.2.1 Controller(控制器存储)
Controller
public class UserController {public void sayHi() {System.out.println(你好Controller);}
}这时我们按照之前的方法获取到Spring中的Bean
ApplicationContext context new ClassPathXmlApplicationContext(spring-config.xml);
UserController userController context.getBean(userController, UserController.class);
userController.sayHi();1.2.2 Service(服务存储)
Service
public class UserService {public void sayHi() {System.out.println(你好Service);}
}1.2.3 Repository(仓库存储)
Repository
public class UserRepository {public void sayHi() {System.out.println(你好Repository);}
}1.2.4 Component(组件存储)
Component
public class UserComponent {public void sayHi() {System.out.println(你好Component);}
}1.2.5 Configuration
Configuration
public class UserConfiguration {public void sayHi() {System.out.println(你好Configuration);}
}1.3 为什么要这么多类注解
既然功能都是一样的为什么需要这么多呢
这和为什么每个省/市都有自己的车牌号是一样的比如陕西车牌号就是陕XXXXXX北京车牌号是京XXXXXXXX。甚至一个省不同的县区车牌号都是不一样的。这样做的好处就是节约了号码更重要的是可以直观的标识一辆车的归属地
那么为什么需要这么多类的注解也是相同的原因就是让程序员看到类注解之后就直接了解当前类的用途。
让代码的可读性提高让程序员能够直观的判断当前类的用途
比如
Controller表示业务逻辑层Service表示服务层Repository表示持久层Configuration表示配置层
程序的工程分层调用流程如下 1.3.1 类注解之间的关系
查看Controller、Service、Repository、Configuration等注解可以发现img
这些类注解里面都有一个注解Component说明它们本身就属于Component的“子类”
1.3.2 Bean命名规则
通过场面的例子我们可以看出通常我们bean使用的都是标准大驼峰的命名而读取的时候首字母小写就可以获取到bean了。
然后当我们首字母和第二个字母都大写的时候就不能正常的读取到Bean了
这个时候我们就要查询Spring关于Bean存储时生成的命名规则了
源码如下
public static String decapitalize(String name) {if (name null || name.length() 0) {return name;}if (name.length() 1 Character.isUpperCase(name.charAt(1)) Character.isUpperCase(name.charAt(0))){return name;}char chars[] name.toCharArray();chars[0] Character.toLowerCase(chars[0]);return new String(chars);
}1.4 方法注解
类注解是添加到某个类上的而方法注解是放到某个方法当中如以下代码实现
public class UserBean {Beanpublic void sayHi() {System.out.println(你好bean);}
}但是我们发现根本获取不到。这是为什么
1.4.1 方法注解要配合类注解来使用
在Spring框架当中方法注解Bean要配合类注解才能将对象正常的存储到Spring容器当中如下代码
Component
public class UserBean {Beanpublic User getUser() {User user new User();user.setId(1);user.setName(张三);return user;}
}1.4.2 重命名Bean
可以通过设置name属性给Bean对象进行重命名操作
Component
public class UserBean {Bean(name user)public User getUser() {User user new User();user.setId(1);user.setName(张三);return user;}
}Bean命名规则当没有设置name属性的时候那么bean默认的名称就是方法名当设置了name属性之后只能通过重命名的那么属性对应的值来获取。也就是说重命名之后再使用方法名就获取不到了
2. 获取Bean对象对象装配
获取bean对象也叫对象装配是把对象取出来放到某个类当中也时候也叫作对象注入
对象装配的实现有以下3中方法
属性注入构造方法注入Setter注入
2.1 属性注入 2.2 构造方法注入 如果当前类当中只存在一个构造方法那么Autowired注解可以省略
2.3 Setter注入 2.4 三种注入的优缺点
属性输入的优点是简介、使用方便缺点是只能用于IOC容器如果不是IOC容器不可用并且只有在使用的时候才会出现NPE空指针异常构造方法注入是Spring推荐的注入方式。它的缺点是如果有多个注入会显得比较臃肿但是出现这种情况应该考虑一下当前类是否符合程序的单一职责的设计模式了它的有点在于通用性在使用之前一定能保证注入的类不为空Setter方式是Spring前期版本推荐的注入方式但是通用性不如构造方法所有Spring版本已经推荐使用构造方法来注入了
2.5 Resource另一种注入关键字
Autowired和Resource的区别
出身不同Autowired 来自于Spring而Resource来自于JDK的注解使用时设置的参数不同Resource支持更多的参数设置例如name设置根据名称获取BeanAutowired可用于Setter注入、够着函数注入、属性注入而Resource只能用于Setter和属性注入不用用于构造函数注入
2.6 同一个类型多个Bean报错
解决方案有以下两种
使用Resource(name“user1”)定义使用Qualifier注解定义名称
Controller
public class UserController5 {// 注⼊AutowiredQualifier(value user2)private User user;public User getUser() {return user;}
}3. 总结
将对象存储到Spring中 使用类注解Controller、Service、Repository、Configuration、Component【它们之间的关系】使用方法注解Bean【注意事项必须配合类注解一起使用】 Bean的命名规则首字母和第二个字母都不是大写首字母小写来获取Bean如果首字母和第二个字母都是大写那么直接使用Bean名来获取Bean从Spring中获取对象 属性注入Setter注入构造方法注入推荐 注入的关键字有 AutowiredResource Autowired 和 Resource 区别出身不同使用是设置参数不同Resource支持更多的参数设置解决同一个类型多个Bean的报错 使用Resourcename “”使用Qualifier(“”)