注入非Spring Bean

需求:某些POJO需要自己手动new 出来,但这些POJO又要用到被spring管理的bean.

虚拟环境:现有类PO,PO2.前者是我们要手动new 的,后者是由spring进行管理的.

/类:PO
    import org.springframework.beans.factory.annotation.Configurable;

//这里Configurable表示类PO即使在spring之外创建,仍然能够由spring进行配置."npo"是spring配置文件中的
//id为"npo"的bean,即在spring中依然有个和类PO相对应的一个类,当 new PO() 时,spring会按id为"npo"的bean
//为模板对类PO进行相应的注入
@Configurable("npo")
public class PO {
 private String po1;
 private PO2 po2;

 public String getPo1() {
  return po1;
 }

 public void setPo1(String po1) {
  this.po1 = po1;
 }

 public PO2 getPo2() {
  return po2;
 }

 public void setPo2(PO2 po2) {
  this.po2 = po2;
 }

}

/类:PO2
public class PO2 {
 private String po2;

 public String getPo2() {
  return po2;
 }

 public void setPo2(String po2) {
  this.po2 = po2;
 }
}

/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:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
 <!--告诉spring有一些bean需要进行配置,包括了在外部创建的bean-->
 <aop:spring-configured></aop:spring-configured>
 <!--abstract="true"表示该类不会被spring实例化-->
 <bean id="npo" class="com.test.PO" abstract="true">
  <property name="po2" ref="npo2"></property>
  <property name="po1" value="这是 po1"></property>
 </bean>

 <bean id="npo2" class="com.test.PO2">
  <property name="po2" value="这是po2"></property>
 </bean>
</beans>

==========环境配置=========
还要引入aspectj的.jar包,即让程序运行时具有AspectJ的功能.
在spring下载文件中的lib中找到 aspectjweaver.jar,现假如该包所在路径为"d:\aspectjweaver.jar".
则有如下情况进行引入:
1.如果是应用程序方式运行:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestS {
 public static void main(String[] args) {
  ApplicationContext application = new ClassPathXmlApplicationContext("applicationContext.xml");

  PO p1 = new PO();
  System.out.println(p1.getPo1() + "::" + p1.getPo2().getPo2());
 }
}

同时要导入spring-aspects.jar
右击-->Run As-->Open Run Dialog...-->左侧Java Application找到TestS(如果没有,先按Ctrl+F11 运行下TestS)
-->右侧的Arguments选项卡中,VM arguments:输入-javaagent:D:\aspectjweaver.jar

2.如果是Tomcat中:
打开<Tomcat_Home>\bin\catalina.bat,在该批处理文件头部添加以下的设置:
set JAVA_OPTS=-javaagent:D:\aspectjweaver.jar 
这样,Tomcat服务启动时,JVM就会使用这个参数了。

3.如果是通过Eclipse启动的Tomcat:
Configure Server-->Servers-->Tomcat x.x-->JDK-->Optional Java VM arguments 
输入:-javaagent:d:\aspectjweaver.jar

OK 现在你就能自己new个类并能获取spring里的东西了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值