0
点赞
收藏
分享

微信扫一扫

Spring配置文件-bean的引用注入-setter注入-constructor-arg注入

软件共享软件 2022-03-11 阅读 34

为了降低dao层与service层的耦合性
UserController.java

package com.yiheng.demo;

import com.yiheng.service.UserService;
import com.yiheng.service.impl.UserServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserController {
    public static void main(String[] args) {
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = (UserService) app.getBean("userService");
        userService.save();

    }
}

UserDaoImpl.java

package com.yiheng.dao.impl;

import com.yiheng.dao.UserDao;

public class UserDaoImpl implements UserDao {

    public UserDaoImpl(){
        System.out.println("UserDaoImpl创建");
    }
    @Override
    public void save() {
        System.out.println("save.....");
    }
}

UserDao接口

package com.yiheng.dao;
public interface UserDao {
    public void save();
}

UserService接口

package com.yiheng.service;

public interface UserService {
    public void save();
}

1、set方法注入

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--    set方法引入-->
    <bean id="userDao" class="com.yiheng.dao.impl.UserDaoImpl" ></bean>
    <bean id="userService" class="com.yiheng.service.impl.UserServiceImpl">
    <property name="userDao" ref="userDao" ></property>
</bean>
</beans>

UserServiceImpl.java

package com.yiheng.service.impl;

import com.yiheng.dao.UserDao;
import com.yiheng.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserServiceImpl implements UserService {
    //set方法引入userDao,还需在Spring容器中配置
    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    
    @Override
    public void save() {
//        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
//        UserDao userDao = (UserDao)app.getBean("userDao");
        userDao.save();
    }
}

运行UserController的方法:
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext(“applicationContext.xml”);
UserService userService = (UserService) app.getBean(“userService”);
userService.save();
}
在这里插入图片描述

2、构造方法注入

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="userDao" class="com.yiheng.dao.impl.UserDaoImpl" ></bean>
<!--&lt;!&ndash;    构造方法引入&ndash;&gt;-->
    <bean id="userService" class="com.yiheng.service.impl.UserServiceImpl">
        <constructor-arg name="userDao" ref="userDao"></constructor-arg>
    </bean>
</beans>

UserServiceImpl.java

package com.yiheng.service.impl;

import com.yiheng.dao.UserDao;
import com.yiheng.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserServiceImpl implements UserService {
    //set方法引入userDao,还需在Spring容器中配置
//    private UserDao userDao;
//
//    public void setUserDao(UserDao userDao) {
//        this.userDao = userDao;
//    }
    //构造方法引入userDao,还需在Spring容器中配置
    private UserDao userDao;
    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }
    public UserServiceImpl() {
    }

    @Override
    public void save() {
//        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
//        UserDao userDao = (UserDao)app.getBean("userDao");
        userDao.save();
    }
}

结果和上面set方法一样。

结论:Spring容器在创建UserService时就创建UserDao,并且把UserDao对象放到了UserService里面。

举报

相关推荐

0 条评论