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

2021-07-02 14:08

阅读:496

标签:分享   src   第一个   inter   开发人员   开发   rop   method   一个   

spring依赖注入的方式有4种

  • 构造方法注入
  • 属性注入
  • 工厂注入
  • 注解注入

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

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");
    }
}
技术分享图片

配置文件:bean.xml

技术分享图片
技术分享图片

测试类:

技术分享图片
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
技术分享图片

注解方式在后面详细介绍

依赖注入—自动装配

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

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

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

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


评论


亲,登录后才可以留言!