本文主要通过三个实例,记录博主的spring注解学习历程。
三个实例:
- 饮品制作(饮品名+佐料+大或小或中杯);
- 饮品单(客户+饮品制作);
- 饮品单(客户+饮品制作),利用了接口。
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();
}
}
- OrderDetailServletImpl 是业务层的实现类
实现OrderDetailServlet接口
可以实例化,即创建对象,通过注释@Component装载Servlet - 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