Spring泛型注入数据
Posted cxq前
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring泛型注入数据相关的知识,希望对你有一定的参考价值。
注解:
@Autowired(required=true)
required=false 告诉Spring容器,找不到匹配的bean时 控制台不会报错
required=true 告诉Spring容器,找不到匹配的bean时 控制台抛出异常
面试题:在bean标签中,ID和name属性,有啥区别?(https://blog.csdn.net/dys1990/article/details/6755317)
简单的说:id用来标识bean,是唯一的,且只有一个;name定义的是bean的alias,可以有多个,并可能与其他的bean重名。
详细的说:
id是唯一标识bean.不能用特殊字符:×#@ ,不能用数字开头。在bean引用的时候只能用id指向你需要的bean;
name 可以用特殊字符,并且一个bean可以用多个名称:name=“bean1,bean2,bean3”,用逗号隔开。
通过id和name都可以取出该Bean.
@Autowired 和@Resource
@Autowired可以出现的地方@Resource也可以出现 。
作用一样,但厂家不一样。@Autowired 是Spring的 import org.springframework.beans.factory.annotation.Autowired;
@Resource 是JavaEES的 import javax.annotation.Resource; (1)他的注解要求提供一个bean属性的名字 ,若属性为空,则自动采用注解标注的名字或方法名作为bean的名称。没有标注,默认按名称进行装配(注入对象),如果找不到与之匹配的名字,则按类型进行匹配
如果name属性一旦指定,则必须按名称进行装配,就不会有如果名字对应不上,则按照类型装配一说
面试题:@Autowired 和@Resource的区别:
都用来注入数据。对象的(装配bean的) 可以卸写在字段上 set方法上
@Autowired 默认按类型装配 @Autowired 关联两个层
@Resource默认按名称进行装配
<!--
全注解
-->
<!-- 用@Autowired就得写 这个 注解配置 --> 加代码注解
<context:annotation-config></context:annotation-config>
<!-- 扫描指定文件夹,将扫描到的文件交给Spring容器进行bean管理--> 实例化对象交给备案管理
<context:component-scan base-package=""></context:component-scan>
@Repository // @Repository 仓库 实例化dao 层对象 (写到实现类上)
@service
Spring 根据注解 执行 controller 层 ------service层--------dao层
实体类注解: @Component 组件的意思 这里是把。。。实例化对象 如果是实体类,则在Spring中,也是在需要的时候,在Spring容器中纳入管理的,那么必须使用Spring注解
1.泛型依赖注入数据:
Base Service<T> 泛型 T 形参 可以放任意类型 BaseRespositroy<T> 被Base Service<T> 调用 ---------> 引用
3.
两个基类,分别是BaseService和BaseRespository,带有泛型的2个类中,会定义一些我们常用的方法:save update,delete 等等
2)BaseService和BaseRespository 存在一个引用关系,以便在BaseService中调用BaseRespository.
3)综上:UserService与UserPeposity
二、2019.2.25 Aop 面向切面编程
public class Security {
//切面 public void checkSecurity(String username,String psw){ //通知 System.out.println("进行安全检查 "+username+" "+psw); } }
配置文件如下
<bean id="security" class="com.cstp.service.Security" />
<!-- 定义切面对象 --> <bean id="userManager" class="com.cstp.service.UserManagerImpl" /> <!-- 创建接口实现类对象 -->
<aop:config>
<!--所有的切面和通知都必须定义在aop:config元素内部 --> <aop:aspect ref="security"> <!-- 配置切面 -->
<!-- 声明切入点 -->
<aop:pointcut id="userManagerPointcut" expression="execution(* com.cstp.service..*.save*(..)) and args(username,psw)"/>
<!--声明前置通知,在匹配方法执行前运行--> <aop:before method="checkSecurity" pointcut-ref="userManagerPointcut"/> </aop:aspect> </aop:config>
------------------------------------------------------------------
<!-- 声明切入点 -->
<aop:pointcut id="userManagerPointcut"
expression="execution(* com.cstp.service..*.save*(..)) and args(username,pwd)"/>
expression:表达式 (* com.cstp.service..*.save*(..)) 第一个 * 表示 方法的返回值 运行service 包下的所有的类的所有的以save开头的方法 必须传两个参数(和检测方法有关)
args(username,pwd) args 是检测方法传的参数
那对象进行关联 对对应 基型 的关系关联 关联指定 的这个对象 ref="security" 所在的这个类的 这个方法 checkSecurity运行
------------------------AOP注解-------------------------------------------------
java——Arrays.asList()方法 Arrays.asList() 是将数组作为列表
https://www.cnblogs.com/tina-smile/p/5056174.html
public class Test { public static void main(String[] args) { Integer[] a = {1,2,3,4}; List list = Arrays.asList(a); System.out.println(list.size()); //4 } }
普通的类 交给Spring容器管理 @compnent
以上是关于Spring泛型注入数据的主要内容,如果未能解决你的问题,请参考以下文章
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段