spring 自动装配

autowired 自动注入 

 先说 bean节点 的 

autowire  属性 Byname bytype 翻译一下,一个就是靠名字 一个就是靠类型 

由于一点点原因,这里下回仔细补充,我写的示例丢了。

e m m m m

现在来讲注释标签

先来一个简单的 ,就一个类的

先在我们的配置文件 applicationcontext中的头文件加入
xmlns:context="http://www.springframework.org/schema/context" 
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd

使用注解标签,配置文件先要能识别他 , 所以 , 得加上面的东西 , 识别的路径 ,现在开始写

 <context:component-scan base-package="cn.autowired.entity"></context:component-scan>

 

package为使用注解的路径 

现在来写类

@Component("car")
public class Car {
    @Value("兰博基尼")
    private String name;
    @Value("1")
    private  int age;


    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

以上就是一个简单的类了 , 

@Component("car")  getbean通过它输出值 
  @Value("兰博基尼")  为属性赋值 
 都在上面写

现在写测试类

    @Test
    public void ccd(){
        ApplicationContext context=new ClassPathXmlApplicationContext("application-03.xml");

       Car c= (Car)context.getBean("car");

        System.out.println(c.getName());
    }

     通过 获取

@Component("car") 里面的值

来拿取对象,然后我还输出了一下

现在看运行后的控制台

三月 07, 2018 10:38:57 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@2280cdac: startup date [Wed Mar 07 22:38:57 CST 2018]; root of context hierarchy
三月 07, 2018 10:38:57 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [application-03.xml]
兰博基尼

现在来说 , 在另一个类中写入另一个对象的类 ,来 通过 注解 来获取值

现在看我的类
@Component("stau")
public class Student {

    @Value("xxx")
    private  String name;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Value("18")
    private Integer age;

    //@Resource(name = "car")
    @Autowired()
   @Qualifier(value = "car")
    private  Car ca;



    public Car getCa() {
        return ca;
    }

    public void setCa(Car ca) {
        this.ca = ca;
    }

    public String getName() {
        return name;
    }

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

 

处了上面见过的注解标签 ,还有 
 //@Resource(name = "car")
    @Autowired()
   @Qualifier(value = "car")  
以上标签为在另一个类中对象中赋值,

1
@Resource(name = "car") 

在对象属性上写 name的值为 那个类的
@Component("xxx") 中的值 ,就这样,值就装配上去了 

现在看测试类,以及控制台

@Component("stau")
public class Student {

    @Value("xxx")
    private  String name;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Value("18")
    private Integer age;

    @Resource(name = "car")
    //@Autowired()
  // @Qualifier(value = "car")
    private  Car ca;



    public Car getCa() {
        return ca;
    }

    public void setCa(Car ca) {
        this.ca = ca;
    }

    public String getName() {
        return name;
    }

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

 

 
    @Test
    public void as(){
        ApplicationContext context=new ClassPathXmlApplicationContext("application-03.xml");
        Student stu=     (Student)context.getBean("stau");
        System.out.println(stu.getName());
        System.out.println(stu.getCa().getName());

    }




三月 07, 2018 10:47:45 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@2280cdac: startup date [Wed Mar 07 22:47:45 CST 2018]; root of context hierarchy
三月 07, 2018 10:47:45 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [application-03.xml]
xxx
兰博基尼

不仅把本类中的值输出,也将控过装配

@Resource(name = "car")  拿到了另一个类的值 



现在说
 @Autowired()
   @Qualifier(value = "car") 的这种方法 ,  Value 也是那边那个类的
@Component中的值  

@Component("stau")
public class Student {

    @Value("xxx")
    private  String name;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Value("18")
    private Integer age;

   // @Resource(name = "car")
    @Autowired()
   @Qualifier(value = "car")
    private  Car ca;



    public Car getCa() {
        return ca;
    }

    public void setCa(Car ca) {
        this.ca = ca;
    }

    public String getName() {
        return name;
    }

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

测试类没变  

直接看结果 

三月 07, 2018 10:52:22 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@2280cdac: startup date [Wed Mar 07 22:52:22 CST 2018]; root of context hierarchy
三月 07, 2018 10:52:22 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [application-03.xml]
xxx
兰博基尼

 也是一样的 , 都能够 装配数据上去 

JDK和JRE的区别?
解析:JDK Java Delvelopment Kit Java 开发工具包
jar包 -----》各种类和接口
JRE:运行环境

静态打理  

 

了解一下静态代理满足的条件和他的弊端

1、需要知道核心类(被代理类)是哪一个类,并且有什么方法。 

2、非核心的代码需要重复写多次,显得代码的结构臃肿,形成代码冗余。

3、非核心类(代理类)需要实现核心类(被代理类)实现的接口,也就是他们需要实现共同的接口,但是以核心类实现的接口(被代理类)为准。

  现在写个东西,我们来认识一下 

  先定义一个接口  里面来一个方法 

  

public interface Subject {

    public void request();

}

   写个东西实现下

public class RealSubject implements Subject {
    public void request() {
        System.out.println("我是xxx");
    }
}

再写个  也实现以下方法 在写一个 上一个类的变量 new 之后 生成以下getset 属性   在他实现方法 内部 使用 另一个类的方法 

public class dali implements Subject {

    private  RealSubject realSubject=new RealSubject();


    public RealSubject getRealSubject() {
        return realSubject;
    }

    public void setRealSubject(RealSubject realSubject) {
        this.realSubject = realSubject;
    }

    public void request()
    {

        System.out.println("a");


        realSubject.request();


        System.out.println("b");
    }
}

 

 并且在他上面的 下面的 写个 a b 

测试
    @Test
    public void ad(){

        RealSubject re=new RealSubject();

        dali da=new dali();

        da.setRealSubject(re);

        da.request();


    }

a
我是xxx
b

 

以上就是控制台  执行 代理对象 

 

 








posted on 2018-03-07 23:16  LWJDD  阅读(131)  评论(0编辑  收藏  举报

导航