java框架篇---spring IOC依赖注入
2021-07-02 14:08
标签:分享 src 第一个 inter 开发人员 开发 rop method 一个 spring依赖注入的方式有4种 下面通过一个实例统一讲解: 工厂类 配置文件:bean.xml 测试类: 结果: 注解方式在后面详细介绍 Spring中提供了自动装配依赖对象的机制,但是在实际应用中并不推荐使用自动装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果。 自动装配是在配置文件中实现的,如下: 只需要配置一个autowire属性即可完成自动装配,不用再配置文件中写 Autowire的属性值有如下几个: · byType 按类型装配 可以根据属性类型,在容器中寻找该类型匹配的bean,如有多个,则会抛出异常,如果没有找到,则属性值为null; · byName 按名称装配 可以根据属性的名称在容器中查询与该属性名称相同的bean,如果没有找到,则属性值为null; · constructor 与byType方式相似,不同之处在与它应用于构造器参数,如果在容器中没有找到与构造器参数类型一致的bean,那么将抛出异常; · autodetect 通过bean类的自省机制(introspection)来决定是使用constructor还是byType的方式进行自动装配。如果发现默认的构造器,那么将使用byType的方式。 java框架篇---spring IOC依赖注入 标签:分享 src 第一个 inter 开发人员 开发 rop method 一个 原文地址:https://www.cnblogs.com/jiangzhaowei/p/9629818.html
User.java
package com.bjsxt.model;
public class User {
private String username;
private String password;
public User(){}
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}
}
UserDAO.java
package com.bjsxt.dao;
import com.bjsxt.model.User;
public interface UserDAO {
public void save(User user);
}
UserDAO实现类UserDAOImpl
package com.bjsxt.dao.impl;
import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;
public class UserDAOImpl implements UserDAO {
public void save(User user) {
//Hibernate
//JDBC
//XML
//NetWork
System.out.println("user saved!");
}
}
第一个:UserFactory
package com.bjsxt.factory;
import com.bjsxt.model.User;
public class UserFactory {
public User CreatUser () {
User user=new User();
user.setUsername("周1");
user.setPassword("oumyye");
return user;
}
}
第二个:UserFactory2
package com.bjsxt.factory;
import com.bjsxt.model.User;
public class UserFactory2 {
public static User CreatUser () {
User user=new User();
user.setUsername("偶my耶1");
user.setPassword("oumyye");
return user;
}
}
控制层:UserService
package com.bjsxt.service;
import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;
public class UserService {
private UserDAO userDAO;
public void init() {
System.out.println("###########init");
}
public void save(User user) {
userDAO.save(user);
}
public UserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public UserService(UserDAO userDAO) {
super();
this.userDAO = userDAO;
}
public void destroy() {
System.out.println("destroy");
}
}
package com.bjsxt.service;
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.bjsxt.model.User;
public class UserServiceTest {
@Test
public void test() {
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
依赖注入—自动装配
上一篇:C#多线程---委托实现异步