一直想通过研究别人好的代码来提高自己的水平,可是一直没有坚持下去,Hibernate看了几天实在看不明白放弃了,roller、jive也是半途而废,基本什么也没有学到,甚至可以说根本就没看明白,这次又做出学习xwork的决定,同时决定把学习的过程和学习成果写出来,也算是对自己的一个督促吧,
关于xwork我就不介绍了,网上多的是(关键是我自己的功课也没做好
),
废话不说了!!!!把这两天看的东西写下来,先重一个例子说起,
1.随便写两个接口(我真的是随便写的,呵呵):
java 代码
- interface IPerson {
- public void say();
- }
-
-
-
- interface IUserPerson {
- public void say();
- }
2.它们的实现类
java 代码
- public class Person implements IPerson{
- public Person(){}
- public void say(){
- System.out.println("person");
- }
- }
-
-
-
- public class UserPerson implements IUserPerson{
- private IPerson person;
-
- public IPerson getPerson() {
- return person;
- }
- //这个注释就是说明需要依赖注入的
- @Inject
- public void setPerson(IPerson person) {
- this.person = person;
- }
- public void say(){
- System.out.println("userperson");
- person.say();
- }
- }
3.最后一步:!!!
java 代码
- import com.opensymphony.xwork2.inject.Container;
- import com.opensymphony.xwork2.inject.ContainerBuilder;
-
- public class ContainerTest {
- private Container container;
-
- public static void main(String[] args) {
- ContainerTest test=new ContainerTest();
-
- test.setContainer(new ContainerBuilder().factory(IPerson.class,Person.class).factory(IUserPerson.class,UserPerson.class).create(true));
- Container container=test.getContainer();
- IUserPerson person=container.getInstance(IUserPerson.class);
- person.say();
-
-
- }
-
- public Container getContainer() {
- return container;
- }
-
- public void setContainer(Container container) {
- this.container = container;
- }
下面对这个例子进行深入解析:
先来看一下在
java 代码
这个对象是发生了什么
java 代码
- public ContainerBuilder() {
-
- factories.put(Key.newInstance(Container.class, Container.DEFAULT_NAME),
- CONTAINER_FACTORY);
-
-
- factories.put(Key.newInstance(Logger.class, Container.DEFAULT_NAME),
- LOGGER_FACTORY);
- }
factories是一个Map类型的变量
这两行代码的目的就是把一个ContainerImpl的实现放到这个Map中(实际上并没有new一个对象,只有在用到的时候这个对象才个真正的实例化,在这里只是放入一些必要信息)。
关键来看一下factory(...)方法:
在factory(..)执行的过程中,它会执行
java 代码
- final InternalFactoryextends T> scopedFactory =
- scope.scopeFactory(key.getType(), key.getName(), factory);
- factories.put(key, scopedFactory);
这段代码,它就是把一些创建对象的必要信息放到factories中,
Key也是用来保存信息的,通过Key.newInstance(type, name)来创建一个Key对象,这里的type就是上面传入的IPerson.class,在这里有一个重要的地方就是factory的创建,它是通过下面的代码完成的
java 代码
- InternalFactoryextends T> factory = new InternalFactory<t>() { </t>
-
- volatile ContainerImpl.ConstructorInjectorextends T> constructor;
-
- @SuppressWarnings("unchecked")
-
- public T create(InternalContext context) {
- if (constructor == null) {
- this.constructor =
- context.getContainerImpl().getConstructor(implementation);
- }
- return (T) constructor.construct(context, type);
- }
-
- public String toString() {
- return new LinkedHashMap
- put("type", type);
- put("name", name);
- put("implementation", implementation);
- put("scope", scope);
- }}.toString();
- }
- };
这里的关键就是create(..)这个方法的实现,将来在实例化对象的时候会用到!
分享到:
相关推荐
深入研究xwork-2.1.6-src,我们可以学习到以下核心知识点: 1. **Action管理**:xwork如何创建、初始化和管理Action实例,以及如何通过ActionContext传递请求上下文信息。 2. **拦截器机制**:xwork的拦截器链是...
通过深入研究xwork-core-2.1.6的源代码,开发者不仅可以掌握Struts2的核心概念和工作流程,还能学习到设计模式、并发控制、性能优化等方面的实践知识。这将极大地提高我们解决实际问题的能力,使我们能更好地应对...
《深入解析xwork-core-2.2.1-sources》 xwork-core是Struts2框架的核心组件之一,它在Web应用开发中扮演着至关重要的角色。本文将深入探讨xwork-core-2.2.1-sources中的核心概念、功能以及源代码分析,帮助开发者更...
在深入探讨Struts-xwork-core源码之前,我们需要了解一些基本概念。Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架,它的目标是简化开发并提供更强大的控制层。XWork则是Struts2的基础,...
《深入解析xwork-core-2.1.6:核心组件与源码剖析》 xwork-core-2.1.6是Struts2框架的核心库,它为基于Action的MVC设计模式提供了强大的支持。这个版本的发布对于理解Struts2的工作机制至关重要。本文将深入探讨...
通过对xwork-core-source-2.3.1.2源码的深入研究,开发者可以更好地理解Struts2的工作原理,提高代码的维护性和扩展性。源码中的注释和设计模式为学习和调试提供了宝贵的资源,使得开发者能够定制化框架,满足特定...
通过对`xwork-2.0.5`源代码的深入研究,开发者不仅可以掌握Struts2的核心运作机制,还能更好地优化应用性能,解决实际问题。同时,这也为理解和学习其他基于XWork的框架(如Struts2)奠定了坚实的基础。 总之,`...
通过对xwork-2.0.4源码的深入研究,我们可以理解其背后的架构设计和工作原理,从而更好地利用这个框架来构建高效、可维护的Web应用。无论是Action、Interceptor还是ActionContext,每一个组件都是为了实现更灵活、更...
通过深入研究XWork-2.1.2的源码,开发者不仅可以了解其设计理念和实现方式,还能掌握如何自定义拦截器、处理动作流、优化数据绑定等高级技巧,这对于提升Java Web开发技能和理解Struts2框架具有重要意义。...
总的来说,研究"xwork-2.1.2-sources"这个压缩包中的源码,能让我们深入理解Struts2的底层工作原理,提高开发效率,同时也有助于我们进行更高效的故障排查和性能优化。对于任何希望成为Java Web开发高手的人来说,...
通过对xwork-2.0.4源码的深入研究,开发者不仅可以掌握Struts2框架的内部运作机制,还能提高问题定位和性能优化的能力,同时激发对设计模式和面向切面编程的深入理解。这是一次宝贵的代码学习之旅,对于任何希望提升...
《深入解析xwork-2.0.7:框架与源码探索》 xwork-2.0.7是一个重要的Java框架,它在Web应用开发领域扮演着不可或缺的角色。...对于有志于深入研究Web应用开发的程序员来说,xwork-2.0.7无疑是一份宝贵的资源。
《深入解析xwork-2.2.1源代码》 xwork-2.2.1是Struts2框架的核心组成部分,它提供了Action处理、类型转换、数据校验、国际化等...深入研究源代码,不仅可以提升开发技能,也能帮助我们更好地应对实际项目中的问题。
`xwork-2.0.5+src.rar`这个压缩包包含了XWork的源码和相关的JAR包,对于深入理解Struts2的工作原理和进行定制化开发具有重要价值。 1. **XWork框架** XWork是一个独立的框架,它提供了一种基于OGNL(Object-Graph ...
总之,对xwork-2.1.2-all源代码的深入研究,不仅可以增强对Struts2框架的理解,还能为实际项目开发提供强大的理论支撑。通过实践和学习,开发者可以更好地运用xwork的特性,打造高效、稳定的Java Web应用程序。
《深入剖析xwork-2.1.2:构建强大的Struts2.0应用程序》 xwork-2.1.2-all.zip是一个包含了xwork库2.1.2版本的完整源代码压缩包...通过深入研究这个源码包,我们可以提升自己的技能,成为一名更优秀的Java Web开发者。
《深入解析xwork-2.0.4源代码》 xwork-2.0.4-src,这是一个关于OpenSymphony组织开发的xwork框架的源码版本。xwork作为一个核心的业务逻辑处理框架,它是Struts 2的基础,对Java Web开发有着深远的影响。这个zip...
总的来说,深入研究`xwork-2.1.3`源码,不仅可以提升对这个框架的理解,也能增进对Java Web开发的整体认识。从源码中学习设计模式,理解框架的工作原理,以及如何通过Maven进行构建和测试,都将对我们的开发技能带来...
`com.opensymphony.xwork2.DefaultActionInvocation`和`com.opensymphony.xwork2.DefaultActionProxy`中的异常处理代码值得深入研究。 8. **国际化与本地化** XWork支持多语言环境,它通过`...