spring之注解注入

本文主要通过三个实例,记录博主的spring注解学习历程。
三个实例:

  1. 饮品制作(饮品名+佐料+大或小或中杯);
  2. 饮品单(客户+饮品制作);
  3. 饮品单(客户+饮品制作),利用了接口。

Scanfig -> 注解注入的扫描类;
TestDemo -> main方法,运行;

一、项目展示

包含本文中所有用到的类。
项目结构

二、饮品制作 -> Drink.java

/**
 * 1.@Component 注解注入,加(drink1)
 * = <bean id="drink" class="com.spring01.bean.Drink"></bean>
 * 2.@Value(“要赋的值”) 加在要赋值的属性上面,加则为赋值,不加则不赋值
 * = <property name="fruitKind" value="要赋的值"></property>
 */
@Component("drink1")
public class Drink {
	@Value("柳丁汁")
	private String fruitKind;
	@Value("一勺糖")
	private String sugar;
	private String cupSize;
	/**
	 * 创建Get()和Set()方法
	 * @return
	 */
	public String getFruitKind() {
		return fruitKind;
	}
	public void setFruitKind(String fruitKind) {
		this.fruitKind = fruitKind;
	}
	public String getSugar() {
		return sugar;
	}
	public void setSugar(String sugar) {
		this.sugar = sugar;
	}
	public String getCupSize() {
		return cupSize;
	}
	public void setCupSize(String cupSize) {
		this.cupSize = cupSize;
	}
	/**
	 * 如果没有有参构造方法,可以不写。
	 */
	public Drink() {
		
	}
	/**
	 * 有参
	 * @param fruitKind
	 */
	public Drink(String fruitKind){
		this.fruitKind = fruitKind;
	}
	/**
	 * 
	 * @param fruitKind
	 * @param sugar
	 * @param cupSize
	 */
	public Drink(String fruitKind,String sugar,String cupSize){
		this.fruitKind = fruitKind;
		this.sugar = sugar;
		this.cupSize = cupSize;		
	}
	/**
	 * 重写,数据的验证。
	 */
	@Override
	public String toString() {
		return "Drink [fruitKind = "+fruitKind+",sugar = "+sugar+",cupSize = "+cupSize+"]";
	}

二、饮品制作 -> Scanfig.java

/**
 * @ComponentScan 
 * → 仅仅是进行扫描,并不参与业务逻辑
 * @ComponentScan()
 * → ()里边的是,所在的类,不加()就默认为本类。
 */
@ComponentScan

二、饮品制作 -> TestDemo.java

public static void main(String[] args) {
		ApplicationContext ctx = new AnnotationConfigApplicationContext(Scanfig.class);
		/**
		 * ctx.getBean("drink1",Drink.class)
		 * drink1 → @Component("drink1")
		 * Drink.class → public class drink
		 */
		Drink drink = ctx.getBean("drink1",Drink.class);
		System.out.println(drink);
	}

运行结果

Drink [fruitKind = 柳丁汁,sugar = 一勺糖,cupSize = null]

三、饮品单 -> DrinkOrder.java

饮品单:客户+饮品制作(饮品名+佐料+大或小或中杯)

/**
 * DrinkOrder饮品订单类
 */
@Component("drinkOrder")
public class DrinkOrder {
	@Value("颜如玉")
	private String customer;//客户
	@Autowired  // → 自动装配
	private Drink drink;//饮品
	//get()和set()方法
	public String getCustomer() {
		return customer;
	}
	public void setCustomer(String customer) {
		this.customer = customer;
	}
	public Drink getDrink() {
		return drink;
	}
	public void setDrink(Drink drink) {
		this.drink = drink;
	}
	
	public DrinkOrder() {
		
	}
	/**
	 * 有参的构造方法
	 * @param customer
	 * @param drink
	 */
	public DrinkOrder(String customer,Drink drink) {
		this.customer = customer;
		this.drink = drink;
	}
	//订单信息
	public void orderInfo() {
		System.out.println(this.customer+"客户点了一杯   "+drink.getFruitKind()+","+drink.getSugar()+","+drink.getCupSize());
	}

@Autowired // → 自动装配

三、饮品单 -> Scanfig.java

/**
 * @ComponentScan 
 * → 仅仅是进行扫描,并不参与业务逻辑
 * @ComponentScan()
 * → ()里边的是,所在的类,不加()就默认为本类。
 */
@ComponentScan

三、饮品单 -> TestDemo.java

public static void main(String[] args) {
		ApplicationContext ctx = new AnnotationConfigApplicationContext(Scanfig.class);
		DrinkOrder drinkOrder = ctx.getBean("drinkOrder",DrinkOrder.class);
		drinkOrder.orderInfo();
	}

运行结果

颜如玉客户点了一杯 柳丁汁,一勺糖,null

四、饮品单(接口)-> OrderDetailServlet.java

public interface OrderDetailServlet {
	 public void orderDetailPrint();
}

四、饮品单(实现)-> OrderDetailServletImpl.java

/**
 * OrderDetailServletImpl 是业务层的实现类
 * → 实现OrderDetailServlet接口
 * → 可以实例化,即创建对象,通过注释@Component装载Servlet
 * OrderDetailServlet
 * → 接口或抽象类,不能实例化(即创建对象),不能添加注释@Component
 */
@Component("orderService")
public class OrderDetailServletImpl implements OrderDetailServlet{
	@Autowired
	private DrinkOrder order;
	/**
	 * 打印饮品订单的详情
	 */
	@Override
	public void orderDetailPrint() {
		System.out.print("OrderService:");
		order.orderInfo();
	}

}
  1. OrderDetailServletImpl 是业务层的实现类
    实现OrderDetailServlet接口
    可以实例化,即创建对象,通过注释@Component装载Servlet
  2. OrderDetailServlet
    接口或抽象类,不能实例化(即创建对象),不能添加注释@Component

四、饮品单(扫描) -> Scanfig.java

/**
 * @ComponentScan 
 * → 仅仅是进行扫描,并不参与业务逻辑
 * @ComponentScan()
 * → ()里边的是,所在的类,不加()就默认为本类。
 * → ()多个类{"类1","类2"} ,指定范围。
 */
@ComponentScan(basePackages = {"com.spring02.bean","com.spring02.service"})

@ComponentScan(basePackages = {“com.spring02.bean”,“com.spring02.service”})

四、饮品单(main)-> TestDemo.java

public static void main(String[] args) {
		ApplicationContext ctx = new AnnotationConfigApplicationContext(Scanfig.class);	
		OrderDetailServlet orderDetail = ctx.getBean("orderService",OrderDetailServletImpl.class);
		orderDetail.orderDetailPrint();
	}

运行结果

OrderService:颜如玉客户点了一杯 柳丁汁,一勺糖,null

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值