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泛型注入数据的主要内容,如果未能解决你的问题,请参考以下文章

spring4的新特性---泛型注入

spring自定义泛型类中AutoWired注入为null

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

Spring之泛型依赖注入

串线篇spring泛型依赖注入原理