java 自动装载_spring Bean类自动装载实现

本文介绍了Spring Bean的自动装载实现,通过一个简单的WEB工程示例,展示了如何使用@Autowired和@Resource注解进行类型和名称匹配来装载bean。文章中包含了Controller、Service、Entity类的代码示例,并解释了配置文件的设置,以及如何通过注解简化配置,最终达到控制反转的效果。
摘要由CSDN通过智能技术生成

先贴spring的开发文档,有助于大家学习http://shouce.jb51.net/spring/beans.html#beans-factory-class

一直想研究一下spring bean的控制反转的实现,废话不多说。

1、先建了一个WEB工程,导入相关spring的jar包,装载到tomcat上,成功访问,有不懂的童鞋可以移步http://www.cnblogs.com/mei0619/p/6560332.html。

7ea507e364e3346d45e34b88d319a089.png

2.为了方便研究,我将对象的调用直接写在controller里,输出相应的日志,如果可以输出,证明bean是创建成功的,代码如下:

packagecom.controller;importjavax.annotation.Resource;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.web.bind.annotation.ModelAttribute;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.servlet.ModelAndView;importcom.entity.User;importcom.entity.World;

@Controllerpublic classSpringServlet {/*** @Autowired 自动装载world对象 自动按type装载,也就是bean的class属性

* 或者@Resource(name="world") 按name装载,也就是bean的id*/@Resource(name="world") //这里的@Resource(name="world")和@Autowired是一模一样的,publicWorld world;

@RequestMapping("/index")publicString index(Model model){

world.worldTest();return "index";

}

@RequestMapping("/save")public String Save(@ModelAttribute("form") User user, Model model) { //user:视图层传给控制层的表单对象;model:控制层返回给视图层的对象

System.out.println(model.toString());

model.addAttribute("user", user);return "detail";

}

}

3、然后还写了两个类,代码如下:

packagecom.entity;importjava.io.Serializable;importjava.util.Date;importorg.springframework.stereotype.Repository;

@Repositorypublic class User implementsSerializable{private static final long serialVersionUID = 1L;private Integer id; //id

private String name; //name

private String pwd; //pwd

private Integer age; //age//private Date creatTime;//creatTime

publicInteger getId() {returnid;

}public voidsetId(Integer id) {this.id =id;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}publicString getPwd() {returnpwd;

}public voidsetPwd(String pwd) {this.pwd =pwd;

}publicInteger getAge() {returnage;

}public voidsetAge(Integer age) {this.age =age;

}//public Date getCreatTime() {//return creatTime;//}//

//public void setCreatTime(Date creatTime) {//this.creatTime = creatTime;//}

publicString toString(){return name+"333"+age;

}public voidtest(){

System.out.println("22222");

}

}

packagecom.entity;importjava.io.Serializable;importjavax.annotation.Resource;importorg.springframework.beans.factory.annotation.Autowired;public class World implementsSerializable{private static final long serialVersionUID = 1L;//  @Resource(name="user") //这里的@Resource(name="user")和@Autowired是一模一样的,privateUser user;privateString type;publicString getType() {returntype;

}public voidsetType(String type) {this.type =type;

}public voidsetUser(User user) {this.user =user;

}public voidworldTest(){

user.test();

System.out.println("worldTest------" + type+"------"+user.getName());

}

}

在上述代码中,SpringServlet里的world是IOC容器通过标签@Resource从配置文件中根据name装载的,而World类里同样有一个User类,这个类没有加标签,他是通过setUser()的方法装载的user bean类,配置文件里配置一下bean类,代码如下:

这样,SpringServlet里的world就通过控制反转的方式生成对象,然后调用world的worldTest()方法,就可以成功输出,如果world对象没有成功生成,调用他的方法的时候会报java.lang.NullPointerException,

f073f53904b9e0f21741737c759b81c5.png

后台日志打印:

0d79220f6e4de26c9c1ae576942cacec.png

证明对象已经成功创建,如果想给对象添加属性,可以直接在配置文件里添加,如下形式:

最后,我想让代码更精简,不想写那么多配置文件,可以采用注解的形式,为World.java的User属性添加@Autowired或者@Resource(name="user")标签,然后改一下配置文件,只需要写两行,如下:

是不是代码精简了好多,也装逼了好多,程序可以成功运行,同时日志台输出:

72ce3f9e710b962c53da47f004653e21.png

然后就结束了,很多东西还有待学习,,,有很多不明白,最后贴一下配置文件springSerblet-config.xml代码:

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-4.2.xsd

http://www.springframework.org/schema/util

http://www.springframework.org/schema/util/spring-util-4.2.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-4.2.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd

http://www.springframework.org/schema/task

http://www.springframework.org/schema/task/spring-task.xsd ">

applicationContext.xml和web.xml里的是一些web工程基本配置,不要动它,整体结构是这样的:

f3c59495acea2a336ba72488d7cce947.png

最后,欢迎各位大神指导,指出错误和不足。。。。   正在努力学习中。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值