spring 静态接口注入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring 静态接口注入相关的知识,希望对你有一定的参考价值。

java代码中的静态接口:
private static SiteService siteService;
public static SiteService getSiteService()
return siteService;


public static void setSiteService(SiteService siteService)
CreateLuceneAction.siteService = siteService;


xml文件:
<bean id="searchServiceAction" class="****************" scope="prototype">
<property name="siteService">
<ref bean="siteService"/>
</property>
</bean>
<!--↑=============ACTION==============↑-->

<!--↓=============SERVICE=============↓-->
<bean id="siteService" class="******">
<property name="siteDao">
<ref bean="siteDao"/>
</property>
</bean>
<!--↑=============SERVICE=============↑-->

<!--↓=============DAO=============↓-->
<bean id="siteDao" class="***********************">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!--↑=============DAO=============↑-->
老是出现:Invalid property 'siteService' of bean class [************]: No property 'siteService' found如果非静态的就可以

静态的加载时就执行,你用spring注入就没必要是静态的啊 最多是是私有的
所以没必要是静态的
如果是接口你可以是静态的
参考技术A 只有在调用的时候才将对象实例化。也可以说 “注入” 实例化,让对象有生命。
spring 其实就是封装了各种模式:比如工厂模式。
对方法 做了接口等封装,方便调用和以后的管理。
参考技术B 说错了,sorry,LocalSessionFacoryBean不是实现sessionFactory的接口,这里想当然的以为sessionFactory是被 LocalSessionFacoryBean实现的,去研读了一下代码发现
LocalSessionFactoryBean继承了AbstractSessionFactoryBean这个抽象类,这个类实现了org.springframework.beans.factory.FactoryBean接口, spring在装配的时候, 如果发现实现了org.springframework.beans.factory.FactoryBean接口, 就会使用FactoryBean#getObject() 方法返回的对象装配,
这个抽象类两个重要的实现org.hibernate.SessionFactory的方法如下:
//在产生类实例后生成sessionFacotry实例,注入到这个类的sessionFactory中
public void afterPropertiesSet() throws Exception
SessionFactory rawSf = buildSessionFactory();
this.sessionFactory = wrapSessionFactoryIfNecessary(rawSf);

//因为实现FactoryBean接口这个类注入的时候通过getObject()注入的是sessionFactory组件,而不是这个LocalSessionFactoryBean的实例
public Object getObject()
return this.sessionFactory;


---------------------------------------------------------------------
楼主去研读一下sessionFactory的代码,其实里面都是空方法,为什么呢,因为他是个接口,你不结合Spring直接用 Hibernate的时候,sessionFactory用的都是SessionFacotryImpl类的实例(因为接口不能实例化)同理,org.springframework.orm.hibernate3.LocalSessionFactoryBean也是这个接口的实现所以可以注入到sessionFactory中
______________________问题分割线______________________________________

<property name="sessionFactory" ref="sessionFactory"/> 这个注入的不是自己的类org.springframework.orm.hibernate3.HibernateTransactionManager,而是自己类用到的组件LocalSessionFacoryBean
比如Class Person
private String head;

注入的是head而不是Person,但是其中Person的head是依赖你外面配置的head(sessionFactory)的,不知道我这样说楼主明白否

Spring

Spring中接口注入的方式有 接口注入、构造子注入、设值注入

关于初始化块,静态初始化是在类加载的时候执行
实例初始化时在创建对象是执行
实例初始化时在父类的构造方法之后执行的
 
 
 

在switch(表达式)语句中,表达式的类型不能为

A、byte    B、char    C、long    D、int
bgg530 | 浏览 4237 次
推荐于2016-11-21 13:03:39
 
最佳答案
 
C




关于srtuts框架,
Sturus框架基于MVC模式、Struts框架无法完成上传功能、Struts可以有效的降低象奴的类文件数目

public class A{

}

public class Test{

public static void main(String[] args){

int i = 1;

int j = 2;

A a = new A();

A b = new A();

Exchange(i,j);

Exchange(a,b);

}

public static void exchange(int i,int j){

int k  = i;

i = j;

j = k;

}

public static void exchange(A a,A,b){

A c = a;

a = b;

b = c;

}

}

关于main方法的执行,正确的判断是(D

Aij的值交换了,ab指向的对象交换了

Bij的值交换了,ab指向的对象没有交换

Cij的值没有交换,ab指向的对象交换了

Dij的值没有交换,ab指向的对象没有交换

 

 

1. 关于抽象类,下列说法正确的是(

A、如果父类不是抽象类,那么子类也不能是抽象类

B、尽管一个类没有抽象方法,该类仍然可以声明成抽象的

C、抽象类一定不能用private修饰

D、抽象类可以用final修饰

 

Struts中有提供拦截器功能件数什么时拦截器?拦截器的作用及经常使用的场景是什么?

拦截器可以说就是相当于就是把不想要或不想显示的内容给过滤掉。

拦截器可以抽象出一部分代码可以用来完善原来的action。同时可以减轻代码冗余,提高重用率

 

 

1.有部门dept、雇员emp表结构如下,请根据要求写出sql语句。

dept字段为: deptno(primary key)dname

emp字段为: empno(primary key)enamejobmgrsaldeptno

1)写出部门表deptSQL建表语句(deptno类型为Bigdecimal(19,0)类型,dnamevarchar(10)类型)

2)查询部门名称为“信息技术部”的所有员工的员工编号、员工姓名

3)查询全体员工里姓张的员工的基本信息

4)现有需求,将公司的“市场部”改名叫做“综合部”,请写出相应的SQL语句

5)请删除emp中部门名称为“信息技术部”的员工信息。

 

1create table dept

     (deptno bigdecimal(19,0) primary key,

  dname varchar(10)

     )

2select emp.empno,emp.ename from emp where emp.deptno =(select dept.deptno from dept where dname=’信息技术部’)

3select * from emp where ename like ‘张%

4update dept set dname=’综合部’ where dname=’市场部’

5Delete from emp where emp.deptno=(select dept.deptno from dept where dname=’信息技术部’)

 
标准定义:switch 语句后面的表达式可以是整型,字符型,枚举型 因为byte能够无损的转换为int,但是如果是long类型,转换会有丢失,所以不行

以上是关于spring 静态接口注入的主要内容,如果未能解决你的问题,请参考以下文章

feign接口注入失败问题

Spring接口注入示例

spring不用注入注解怎么接口所有实现类bean

Spring接口编程_设值注入和构造注入

分享Spring中接口注入的三种方式

接口的Spring依赖注入