Spring问题求解

spring问题求解:现有Product产品类,根据业务需求要对产品进行保存操作,为了遵循3层框架体系结构,设计了以下类

package com.po;

public class Product {
    private Integer id;
    private String name;
    private String subTitle;
    private float price;
    public Integer getId(){
        return id;
    }

    public String getName() {
        return name;
    }

    public String getSubTitle() {
        return subTitle;
    }

    public float getPrice() {
        return price;
    }

    /*** setter and getter ***/

    public void setId(Integer id){
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setSubTitle(String subTitle) {
        this.subTitle = subTitle;
    }

    public void setPrice(float price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "product [id=" + id +", name=" + name +", subTitle=" + subTitle +",price=" + price +"]";
    }
}
package com.service;
import com.po.Product;
public interface ProductService {
    public void save(Product product);
}


package com.impl;
import com.po.Product;
import com.service.ProductService;
public class ProductServiceImpl implements ProductService{
    @Override
    public void save(Product product) {
        System.out.println(product);
    }
}



package com.controller;
import com.po.Product;
import com.service.ProductService;
public class ProductController {
    private ProductService productService;
    
    public void save(Product product){
        productService.save(product);
    }
}

1.要求基于XML完成对bean的装配,创建测试类,获取ProductContext的实例,调用其save()方法,在控制台上打印Product的信息。
2.要求基于注解(@Autowired)完成对bean的装配,创建测试类,获取ProductContext的实例,调用其save()方法,在控制台上打印Product的信息。

参考:

1.基于XML完成对bean的装配的代码实现:
在resources目录下创建spring-config.xml文件,编写如下代码:

<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">
    <!-- 定义Product对象 -->
    <bean id="product" class="com.po.Product">
        <property name="id" value="1"/>
        <property name="name" value="Product1"/>
        <property name="subTitle" value="SubTitle1"/>
        <property name="price" value="10.0"/>
    </bean>

    <!-- 定义ProductServiceImpl对象 -->
    <bean id="productService" class="com.impl.ProductServiceImpl"/>

    <!-- 定义ProductController对象 -->
    <bean id="productController" class="com.controller.ProductController">
        <!-- 将ProductServiceImpl注入到ProductController -->
        <property name="productService" ref="productService"/>
    </bean>
</beans>
  • 编写测试类ProductTest.java,编写如下代码:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.controller.ProductController;
import com.po.Product;

public class ProductTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        ProductController productController = (ProductController) context.getBean("productController");
        Product product = (Product) context.getBean("product");
        productController.save(product);
    }
}

2.基于注解完成对bean的装配的代码实现:
在ProductServiceImpl类上添加@Service注解,表示将该类作为一个服务类进行注入。

在ProductController类中使用@Autowired注解注入ProductServiceImpl对象。

修改ProductTest.java的代码,不需要再手动获取Product和ProductServiceImpl对象,Spring会自动完成注入。

修改后的代码如下:

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.controller.ProductController;
import com.po.Product;

public class ProductTest {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext("com.impl");
        ProductController productController = context.getBean(ProductController.class);
        Product product = new Product();
        product.setId(2);
        product.setName("Product2");
        product.setSubTitle("SubTitle2");
        product.setPrice(20.0f);
        productController.save(product);
    }
}