[Spring]Spring注解

@Required注解

@Required注解用于setter方法,表明这个属性是必要的,不可少的,必须注入值

假设有个测试类,里面有name和password两个属性

我给两个属性的setter方法都加了@Required注解

package com.example.demo1.Implements;

import com.example.demo1.Interface.UserService;
import org.springframework.beans.factory.annotation.Required;

public class UserClientImpl implements UserService {

    private String name;
    private String password;

    public UserClientImpl(){}

    public UserClientImpl(String name,String password){
        this.name = name;
        this.password = password;
    }

    public String getName() {
        return name;
    }

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

    public String getPassword() {
        return password;
    }

    @Required
    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public void save() {
        System.out.println("客户端保存信息"+name+"--"+password);
    }
}

现在我只给一个属性加注入,另一个不加

可以看到报错

然后我补上注入之后就没问题了

@Autowoired注解

 其实看名字就可以看出来,这个是跟自动装填有关

使用它需要加一行代码

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcess></bean>

1,在属性前加此注解

先给定两个类

package com.example.demo1.Other;

public class CustomerTest {
    public CustomerTest(){
        System.out.println("在Customer.构造方法中...");
    }
    public void show(){
        System.out.println("在Customer.show方法中...");
    }
}
package com.example.demo1.Implements;

import com.example.demo1.Interface.Customer;
import com.example.demo1.Other.CustomerTest;
import org.springframework.beans.factory.annotation.Autowired;

public class CustomerImpl implements Customer {


    private String name;
    private String id;
    @Autowired
    private CustomerTest customerTest;

    public CustomerTest getCustomerTest() {
        return customerTest;
    }

    public void setCustomerTest(CustomerTest customerTest) {
        this.customerTest = customerTest;
    }

    public String getName() {
        return name;
    }

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

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }

    @Override
    public void show() {
        System.out.println(id+"..."+name);
        customerTest.show();
    }
}

第二个类在第三个成员变量前面加个此注解

然后applicationContext这样写

 <bean id="Customer"
          class="com.example.demo1.Implements.CustomerImpl">
    </bean>
    <bean id="CustomerTest" class="com.example.demo1.Other.CustomerTest"></bean>

在打印一下结果

ApplicationContext instance = new ClassPathXmlApplicationContext("applicationContext.xml");
        CustomerImpl customer = (CustomerImpl) instance.getBean("Customer");
        customer.show();
        ((ClassPathXmlApplicationContext) instance).registerShutdownHook();

可以看到Customer对象是自动装填了的

2,在构造函数之前加此注解

效果和上面是一样的,不演示了

3,@Autowired(required=false)的作用

这里跟之前的@Required的作用类似

默认情况下,@Autowired 注释意味着依赖是必须的,它类似于 @Required 注释,然而,你可以使用 @Autowired 的 (required=false) 选项关闭默认行为。

这里跟@Required的效果类似,不演示了

//后面继续更新

猜你喜欢

转载自www.cnblogs.com/Yintianhao/p/9721525.html