[Java Sprint] Spring XML Configuration : Setter Injection Demo

In CustomerServiceImpl.java, we hardcoded 'HibernateCustomerRepositoryImpl'

复制代码
package com.pluralsight.service;
...
public class CustomerServiceImpl implements CustomerService {


    private CustomerRepository customerRepository = new HibernateCustomerRepositoryImpl();

    @Override
    public List<Customer> findAll() {
        return customerRepository.findAll();
    }
}
复制代码

 

To remove hardcoded Repository, we can use Setter Injection.

First, we defined a setter for 'customerRepository' and remove HibernateCustomerRepositoryImpl():

复制代码
public class CustomerServiceImpl implements CustomerService {

    private CustomerRepository customerRepository;

    public void setCustomerRepository(CustomerRepository customerRepository) {
        this.customerRepository = customerRepository;
    }

    @Override
    public List<Customer> findAll() {
        return customerRepository.findAll();
    }
}
复制代码

 

Second, we setter injection in /java/main/resources/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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- Define a class, using implementation-->
    <bean name="foo" class="com.pluralsight.repository.HibernateCustomerRepositoryImpl"></bean>

    <!-- Setter injection: Inject HibernateCustomerRepositoryImpl to customerRepository -->
    <bean name="customerService" class="com.pluralsight.service.CustomerServiceImpl">
        <property name="customerRepository" ref="foo"></property>
    </bean>
</beans>
复制代码

You can think about each <bean> represent a new Class in Java.

So, first bean:

<bean name="foo" class="com.pluralsight.repository.HibernateCustomerRepositoryImpl"></bean>

reference to HibernateCustomerRepositoryImpl class. Because we want to achieve the same effect:

private CustomerRepository customerRepository = new HibernateCustomerRepositoryImpl();

 

Second bean 'customerService' is actual a setter injection, we want to inject first bean (HibernateCustomerRepositoryImpl) into it and assign to 'customerRepository' property:

    <bean name="customerService" class="com.pluralsight.service.CustomerServiceImpl">
        <property name="customerRepository" ref="foo"></property>
    </bean>

 

 

Lastly, we want to use our beans in Application.java:

复制代码
package com.pluralsight;

import com.pluralsight.service.CustomerService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Application {
    public static void main (String[] args) {
       // CustomerService service = new CustomerServiceImpl();

        // Find the applicationContext.xml file
        ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        // Using application context to replace hardcodedCustomerServiceImpl 
        CustomerService service = appContext.getBean("customerService", CustomerService.class);
        System.out.println(service.findAll().get(0).getFirstname());
    }
}
复制代码

 

posted @   Zhentiw  阅读(277)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2017-08-14 [D3] Build a Line Chart with D3 v4
2017-08-14 [Angular] Style HTML elements in Angular using ngStyle
2017-08-14 [Firebase] Firebase Cloud Functions
2017-08-14 [React] Theme your application with styled-components and "ThemeProvider"
2016-08-14 [Web] What Is JSONP?
2016-08-14 [React Fundamentals] Introduction to Properties
2016-08-14 [React Fundamentals] Development Environment Setup
点击右上角即可分享
微信分享提示