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>
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);
}
}