Autowired
@Required 注解适用于Bean的setter方法,这个注解仅仅表示,受影响的bean属性必须在配置时被填充,通过在bean定义或者通过自动装备一个明确的属性值
@Autowired:传统的setter方法,也可用于构造器或成员变量
这个注解是为了完成原先需要在配置文件中说明的类中元素的依赖关系,为加载到IOC容器中做提示
这边@required最大作用在于不会出现空对象(如果标注类本身没有类标注(就是没法扫描到IOC,注入不到管理里,IOC会赋值null对象)),如果出现会报错。
@Autowired,默认情况下,如果因找不到合适的bean将会导致autoqiring失败抛出异常,可以通过@Autowired(required=false)避免
每个类只能有一个构造器被标记位required=true
@Autoqired的必要属性,建议使用@Required注解
@Autowired
可以将@Autowired注解位“传统”的setter方法
可用于构造器或成员变量
@Required注解适用于bean属性的setter方法
这个注解仅仅表示,受影响的bean属性必须在配置时被填充,通过在bean定义或通过自动装配一个明确的属性值
@Autowired注解
该注解一般可以使用在setter方法、构造器和成员变量上。
@Autowired-2
@Autowired
@Required
@Autowired注解可用于 setter方法,也可用于构造器和成员变量
使用@autowired可以完成设值注入和构造注入,
可以注解注解成员变量也可以注解setter方法构造器。
@Required
@Autowired
autowired的参数required的说明。required默认值是false。
Autowired注解可用于set方法、成员变量和构造函数。是常用的注解方法。autowired通过Type对bean进行注入的,而不是name。
@Required:适用于Bean属性的set方法上,bean属性必须在配置时被填充,通过bean定义或自动装配一个明确的属性值。(不常用)
@Autowired:自动注入,一般标识在构造器、set方法、成员变量上。如果找不到注入的实例,则抛出异常,可以通过required=true属性来避免。(如果使用required属性,则使用成员变量时应进行判断是否为空)
注意:每个类的构造器都可以使用@Autowired注解,但只能有一个构造器被标记为Autowired(required=true),required默认为false,这种情况下(解决多个构造器不能使用required属性),@Autowired的必要属性,建议使用@Required注解来代替。
@Autowired
@Required
使用@Required注解时,什么叫需要在被配置时填充?
@Autowired和@Required相比,Autowired既可以用在set方法上,也可以用在构造器或成员变量上。
默认情况下,因为找不到合适的bean将会导致autowiring失败抛出异常,可以写成@Autowired(required=false)的形式来避免。并且,每个类只能有一个构造器被标记为required=true。由于Autowired的必要属性,建议使用Required。
service相关业务逻辑处理,dao更关注data access object针对数据库的操作。
Spring的特色是IoC容器,管理很多Bean,要求这些Bean都配置在applicationContext.xml文件中。 用了注解之后,就不需要在xml文件中配置了,Spring提供了几个辅助类会自动扫描和装配这些Bean。 所以,使用注解能大大减少xml文件的体积。
Spring之@Autowired注解
@Required:适用于Bean属性的set方法上,bean属性必须在配置时被填充,通过bean定义或自动装配一个明确的属性值。(不常用)
@Autowired:自动注入,一般标识在构造器、set方法、成员变量上。如果找不到注入的实例,则抛出异常,可以通过required=true属性来避免。(如果使用required属性,则使用成员变量时应进行判断是否为空)
注意:每个类的构造器都可以使用@Autowired注解,但只能有一个构造器被标记为Autowired(required=true),required默认为false,这种情况下(解决多个构造器不能使用required属性),@Autowired的必要属性,建议使用@Required注解来代替。
代码:
public interface InjectDao {
public void save(String ss);
}
public interface InjectService {
public void say(String s);
}
@Repository(value="dao")
public class InjectDaoImpl implements InjectDao {
@Override
public void save(String ss) {
System.out.println("dao保存了"+ss+":"+hashCode());
}
}
@Service(value="service")
public class InjectServiceImpl implements InjectService {
@Autowired
private InjectDaoImpl idi;
@Override
public void say(String s) {
System.out.println("service接受了参数"+s);
idi.save(s);
}
}
@Configuration
@ComponentScan("Bean")
public class StoreConfig {
}
测试:
@Test
public void test(){
ApplicationContext ac=new AnnotationConfigApplicationContext(StoreConfig.class);
InjectServiceImpl isi=ac.getBean("service",InjectServiceImpl.class);
isi.say("今天下雨了");
}
结果:
service接受了参数今天下雨了
dao保存了今天下雨了:235283278
构造器注入:
@Autowired
public InjectServiceImpl(InjectDaoImpl idi) {
super();
this.idi = idi;
}
set注入:
@Autowired
public InjectServiceImpl(InjectDaoImpl idi) {
super();
this.idi = idi;
}
@Autowired(required=false):如果找不到注入的实例,则不会抛出异常。
注意:每个类只能有一个构造器被标记为required=true。
Autowired 注解
(1)@Required注解可用于setter方法的注解;
(2)@Autowired注解可用于setter方法和构造器或成员变量的注解。
required注解适用于bean属性setter方法
@Autowired 注解。比@Required的范围更广。
@Required 注解。这个注解不常用。
@Required注解
Autowired使用注意事项:
若使用了required=False,自动装配失败时,不会报错
Autowired注解,自动装配,自动调用,默认byType,也可自定义candidate候选来改变匹配方式