java框架注入_java框架篇---spring IOC依赖注入

spring依赖注入的方式有4种

构造方法注入

属性注入

工厂注入

注解注入

下面通过一个实例统一讲解:

User.java

packagecom.bjsxt.model;public classUser {privateString username;privateString password;publicUser(){}publicUser(String username, String password) {super();this.username =username;this.password =password;

}publicString getUsername() {returnusername;

}public voidsetUsername(String username) {this.username =username;

}publicString getPassword() {returnpassword;

}public voidsetPassword(String password) {this.password =password;

}

@OverridepublicString toString() {return "User [username=" + username + ", password=" + password + "]";

}

}

UserDAO.java

packagecom.bjsxt.dao;importcom.bjsxt.model.User;public interfaceUserDAO {public voidsave(User user);

}

UserDAO实现类UserDAOImpl

packagecom.bjsxt.dao.impl;importcom.bjsxt.dao.UserDAO;importcom.bjsxt.model.User;public class UserDAOImpl implementsUserDAO {public voidsave(User user) {//Hibernate//JDBC//XML//NetWork

System.out.println("user saved!");

}

}

工厂类

第一个:UserFactory

packagecom.bjsxt.factory;importcom.bjsxt.model.User;public classUserFactory {publicUser CreatUser () {

User user=newUser();

user.setUsername("周1");

user.setPassword("oumyye");returnuser;

}

}

第二个:UserFactory2

packagecom.bjsxt.factory;importcom.bjsxt.model.User;public classUserFactory2 {public staticUser CreatUser () {

User user=newUser();

user.setUsername("偶my耶1");

user.setPassword("oumyye");returnuser;

}

}

控制层:UserService

packagecom.bjsxt.service;importcom.bjsxt.dao.UserDAO;importcom.bjsxt.model.User;public classUserService {privateUserDAO userDAO;public voidinit() {

System.out.println("###########init");

}public voidsave(User user) {

userDAO.save(user);

}publicUserDAO getUserDAO() {returnuserDAO;

}public voidsetUserDAO(UserDAO userDAO) {this.userDAO =userDAO;

}publicUserService(UserDAO userDAO) {super();this.userDAO =userDAO;

}public voiddestroy() {

System.out.println("destroy");

}

}

配置文件:bean.xml

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

测试类:

packagecom.bjsxt.service;import static org.junit.Assert.*;importorg.junit.Test;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importcom.bjsxt.model.User;public classUserServiceTest {

@Testpublic voidtest() {

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("beans.xml");

UserService userService=(UserService) applicationContext.getBean("userService");//构造方法注入

User user=(User) applicationContext.getBean("user");//属性注入

User user1=(User) applicationContext.getBean("user1");//工厂注入

User user2=(User) applicationContext.getBean("user2");//工厂注入

User user3=(User) applicationContext.getBean("user3");

System.out.println(user);

System.out.println(user1);

System.out.println(user2);

System.out.println(user3);

userService.save(user);

userService.destroy();

}

}

结果:

###########init

User [username=zhou, password=password]

User [username=zhang, password=oumyye]

User [username=周1, password=oumyye]

User [username=偶my耶1, password=oumyye]

user saved!destroy

注解方式在后面详细介绍

依赖注入—自动装配

Spring中提供了自动装配依赖对象的机制,但是在实际应用中并不推荐使用自动装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果。

自动装配是在配置文件中实现的,如下:

只需要配置一个autowire属性即可完成自动装配,不用再配置文件中写,但是在类中还是要生成依赖对象的setter方法。

Autowire的属性值有如下几个:

· byType 按类型装配  可以根据属性类型,在容器中寻找该类型匹配的bean,如有多个,则会抛出异常,如果没有找到,则属性值为null;

· byName 按名称装配  可以根据属性的名称在容器中查询与该属性名称相同的bean,如果没有找到,则属性值为null;

· constructor 与byType方式相似,不同之处在与它应用于构造器参数,如果在容器中没有找到与构造器参数类型一致的bean,那么将抛出异常;

· autodetect 通过bean类的自省机制(introspection)来决定是使用constructor还是byType的方式进行自动装配。如果发现默认的构造器,那么将使用byType的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值