@Conponent
@Repostory @Service @Controller
<context:component-scan base-package="....."> 可以扫描类上注解
<context:annotation-config/> 只在类方法和类成员上扫描
前者包含后者,
默认情况下,类被自动发现并注册bean的条件是:使用@Component@Repository @Service @Controller注解或者使用@Component的自定义注解
定义bean
扫描过程中组件被自动检测,那么Bean名称是有BeanNameGenerator生成的(几种注解方法都会有一个name属性用于显式设置Bean Name)
@Service(“myMovieLister”)
public class SimoleMoviceLister{
}
@Repository
public class MovieFinderImpl implements MovieFinder{
}
自定义类名为基础,头字母小写 为 movieFinderImpl
作用域(Scope)
@Scope(“singlton”)
@Autowired
可以用在set方法上,成员方法和构造器上
@Qualifier
按类型自动装配可能有多个bean实例的情况,可以使用Spring的@Qualifier注解缩小范围,也可以用于指定单独的构造器参数或方法参数
可用于注解集合类型变量
@Qualifier“(“main”)
private MovieCatalog movieCatalog; bean id为main的接口实现类
@Autowired适用于字段,构造器,多参数的方法,这些允许在参数级别使用@Qualifier注解缩小范围
@Resource适用于成员变量,只有一个参数的setter方法,所以在目标是构造器或一个多参数方法时,最好使用@Qualifier
增加配置文件
xml形式: <context:propertu-placeholder location="classpath:/com/acme/jdbc.properties"/>
注解形式:
@Configuration
@ImportResource("classpath:/com/acme/properties-config.xml")
public class AppConfig{
@Value("$(jdbc.url)")
private String url;
}
***************************************************************************************************************************************
@Component @Service @Repostory @Controller
@Autowired有个属性(required=false)找不到时也不报错
@Qualifier(“name”)有多个同类型的bean时,指定注入bean的名称 和@Autowired结合使用,自动注入策略就从ByType变成了ByName
@Scope(singlton propertype)
JSR-250规范定义的注解, 使用JSR-250要注册一个BeanPostProcessor
<bean class="org.springframe.comtext.annotation.CommonAnnotationBeanPostProcessor"/>
@Resource 要引入javax.annotation
@PostConstruct
@PreDestroy
JSR-330规范
@Inject 要引入javax.inject