跟着《spring in action》学习。
package cn.newIDEAlea.strike;
/**
* created infos 2020/12/1---
*/
public interface Dessert {
public float getWeight();
}
package cn.newIDEAlea.strike;
import org.springframework.stereotype.Component;
/**
* created infos 2020/12/1---
*/
@Cold
@Soft
public class Cake implements Dessert {
private float cakeW;
public Cake()
{
cakeW=1.0f;
}
@Override
public float getWeight()
{
return cakeW;
}
}
package cn.newIDEAlea.strike;
import cn.newIDEAlea.anno.Cold;
import cn.newIDEAlea.anno.Fruity;
import org.springframework.stereotype.Component;
/**
* created infos 2020/12/1---
*/
public class Cookies implements Dessert {
private float cakeW;
private String name;
public Cookies()
{
cakeW=1.5f;
name="Cookies";
}
@Override
public float getWeight()
{
return cakeW;
}
@Override
public String toString()
{
return name + " weight is " + cakeW;
}
}
package cn.newIDEAlea.strike;
import cn.newIDEAlea.anno.Cold;
import cn.newIDEAlea.anno.Creamy;
import org.springframework.stereotype.Component;
/**
* created infos 2020/12/1---
*/
public class IceCream implements Dessert {
private float cakeW;
private String name;
public IceCream()
{
cakeW=1.9f;
name="IceCream";
}
@Override
public float getWeight()
{
return cakeW;
}
@Override
public String toString()
{
return name + " weight is " + cakeW;
}
}
package cn.newIDEAlea.strike;
import cn.newIDEAlea.anno.Cold;
import cn.newIDEAlea.anno.Fruity;
import cn.newIDEAlea.conf.DessertConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
/**
* created infos 2020/12/1---
*/
public class Friend {
private Dessert dessert;
private String name;
public Friend(String nstr)
{
name=nstr;
}
public Friend()
{
name="tomcat";
}
@Autowired
@Cold
@Fruity
public Friend(Dessert dessert)
{
name="tomcat";
this.dessert=dessert;
}
@Autowired
@Cold
@Fruity
public void setDessert(Dessert dessert)
{
this.dessert=dessert;
}
public String eat()
{
return name + " likes to eat " + dessert;
}
@Override
public String toString()
{
return "I'm " + name + ", like to eat " + dessert;
}
}
配置类代码如下:
package cn.newIDEAlea.conf;
import cn.newIDEAlea.anno.Cold;
import cn.newIDEAlea.anno.Fruity;
import cn.newIDEAlea.strike.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import sun.security.krb5.internal.crypto.Des;
/**
* created infos 2020/12/1---
*/
@Configuration("cn.newIDEAlea.strike")
public class DessertConfig {
@Bean
public Cake cake()
{
return new Cake();
}
@Bean
public Cookies cookies()
{
return new Cookies();
}
@Bean
public IceCream iceCream()
{
return new IceCream();
}
@Bean
public Friend friend()
{
return new Friend();
}
}
如上实现了基于JAVA配置类的方式实现控制反转和依赖注入。