<?xml version="1.0" encoding="UTF-8"?>
<sioc namespace="global">
<bean name="类名,用来调用,不要代有'.'" class="创建的类路径" create="创建方法" singleton="是否为单列(true,false)">
<string name="参数名">参数值</string>
</bean>
<include>包含其他的配置文件</include>
</sioc>name和id是一样的,只是为了兼容spring的结构。<sioc namespace="global"> 中 global表示命名空间,默认命名空间就是 global,这样你就可以在多个软件项目中为你的bean分类了. <bean name="类名,用来调用" class="创建的类路径" singleton="是否为单列(true,false)"> 这部分和Spring的配置
很相似,但参数配置上为了支持类型转换,感觉清晰改用了变量名称来转换.
<string name="参数名">参数值</string> |
字符串 |
<int name="参数名">参数值</int> 或者integer |
整数 |
<boolean name="参数名">参数值</boolean> 或者bool |
布尔 |
<long name="参数名">参数值</long> |
长整型 |
<float name="参数名">参数值</float> |
单精度 |
<double name="参数名">参数值</double> |
双精度 |
<date name="参数名">参数值</date> |
日期 |
<ref name="参数名">参数值</ref> |
ioc中配置的其他bean |
| <array name="参数名" class="单个参数类型(string,int,boolean...)"> <value>参数值1</value> <value>参数值1</value> </array> |
数组参数 class部分填写string,int,long,boolean,.... |
| <map name="参数名"> <value key="键值1" class="本参数类型">参数值1</value> <value key="键值2" ref="是否为bean资源(true,false)">参数值1</value> </map> |
map 类 |
| <list name="参数名" class="单个参数类型(string,int,boolean...)"> <value>参数值1</value> <value>参数值1</value> </list> |
list 类 |
<?xml version="1.0" encoding="UTF-8"?>
<sioc namespace="global">
<bean name="realSubject" class="com.jspx.sioc.test.RealSubject" singleton="true">
</bean>
<bean name="testAopBean" class="com.jspx.sioc.test.TestAopBean" singleton="true">
</bean>
<bean name="testInterceptor" class="com.jspx.sioc.test.TestInterceptor" singleton="true">
</bean>
<bean name="subject" class="com.jspx.sioc.aop.AopDynamicProxy" create="proxy" singleton="false">
<ref name="target">realSubject</ref>
<ref name="aopBean">testAopBean</ref>
<ref name="methodInterceptor">testInterceptor</ref>
</bean>
</sioc>package com.jspx.sioc.test;
public class RealSubject implements Subject
{
public RealSubject()
{
}
public String request()
{
System.out.println("真实运行,如果被拦截就不会运行这里了");
return "真实运行";
}
}package com.jspx.sioc.test;
import com.jspx.sioc.AopBean;
import java.lang.reflect.Method;
public class TestAopBean implements AopBean
{
public void before(Object proxy, Method method, Object[] args)
{
System.out.println("开始before calling " + method);
}
public void after(Object proxy, Method method, Object[] args)
{
System.out.println("结束after calling " + method);
}
}
package com.jspx.sioc.test;
import com.jspx.sioc.MethodInterceptor;
import java.lang.reflect.Method;
public class TestInterceptor implements MethodInterceptor
{
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
{
//args 你调用的方法参数
System.out.println("你调用的方法名:" + method.getName());
return "拦截和就返回这个变量";
//如果不拦截,就运行下边的方法,可以得到拦截方法的返回值
// return method.invoke(proxy,args);
}
}
String fileName = "ioc.xml";
EntryFactory beanFactory = new EntryFactory();
beanFactory.setIocContext(new ConfigureContext(fileName));
Subject subject = (Subject) beanFactory.getBean("subject");
System.out.println("end:" + subject.request()); LifecycleObject lifecycleObject = new LifecycleObject();
lifecycleObject.setName("调用名称");
lifecycleObject.setClassName("创建的类名");
lifecycleObject.setSingleton(true);
//设置其他属性
beanFactory.registerSingletonBean(lifecycleObject.getName(),"命名空间",lifecycleObject);
String name(); //sioc中的名称
String namespace() default "global"; //命名空间
boolean test() default false; //载入的时候如果为true,并且没有这个对象的时候不报错,否则会报错误
beanArray部分就是你加入其他需要这样执行的地方。
<!--Aop Boost begin-->
<bean id="aopBootBean" class="com.jspx.sioc.aop.AopAppCommandImpl" singleton="true">
<bool name="enable">${aopboot}</bool>
<array name="beanArray" class="string">
<value>aopSchedulerTask</value>
</array>
</bean>
<bean id="aopSchedulerTask" class="com.jspx.task.AopSchedulerTask" singleton="true">
<int name="sleepTime">58</int>
<ref name="soberFactory">jspxSoberFactory</ref>
</bean>
<!--Aop Boost end-->
public abstract class AbstractAopBean implements AopAppBean
{
public static final java.lang.String SUCCESS = "success";
public static final java.lang.String NONE = "none";
public static final java.lang.String ERROR = "error";
public static final java.lang.String INPUT = "input";
public static final java.lang.String LOGIN = "login";
public abstract java.lang.String init() throws java.lang.Exception;
public abstract java.lang.String destroy() throws java.lang.Exception;
}