基本注解:
1.标注 bean类
————————————————————
@Component:标准一个普通的spring Bean类。
@Controller:标注一个控制器组件类。
@Service:标注一个业务逻辑组件类。
@Repository:标注一个DAO组件类。
————————————————————
2. 作用域
————————————————————
@Scope :prototype、request、session、global session
————————————————————
3.自动装配
————————————————————
@Autowired
————————————————————
@Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
@Scope注解 作用域
@Lazy(true) 表示延迟初始化
@Service用于标注业务层组件、
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件。
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Scope用于指定scope作用域的(用在类上)
@PostConstruct用于指定初始化方法(用在方法上)
@PreDestory用于指定销毁方法(用在方法上)
@DependsOn:定义Bean初始化及销毁时的顺序
@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:
@Autowired @Qualifier("personDaoBean") 存在多个实例配合使用
@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
@PostConstruct 初始化注解
@PreDestroy 摧毁注解 默认 单例 启动就加载
@Async异步方法调用
@Scope注解 作用域
@Lazy(true) 表示延迟初始化
@Service用于标注业务层组件、
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件。
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Scope用于指定scope作用域的(用在类上)
@PostConstruct用于指定初始化方法(用在方法上)
@PreDestory用于指定销毁方法(用在方法上)
@DependsOn:定义Bean初始化及销毁时的顺序
@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:
@Autowired @Qualifier("personDaoBean") 存在多个实例配合使用
@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
@PostConstruct 初始化注解
@PreDestroy 摧毁注解 默认 单例 启动就加载
@Async异步方法调用
______________________________________________________________________
bean.xml
搜索 某个包下的所有类
<context:component-scan base-package="com.kn.beanScope" />
______________________________________________________________________
OH.java
注意@Component 注解,即 标注一个普通的bean
package com.kn.beanScope;
import org.springframework.stereotype.Component;
@Component
public class OH {
public void sout(){
System.out.println("???? THIS IS OH date!");
}
}
BeanScope.java
@Scope 设定作用域 为 每次新建自身实例
package com.kn.beanScope;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
@Component
@Scope("prototype")
public class BeanScope {
@Autowired
private OH oh;
private String beanname;
public void say(){
System.out.println("BeanScope say :"+this.hashCode()+"from "+beanname);
oh.sout();
}
public void init(){
beanname="FFF";
}
public void destroy(){
beanname="GGGG";
say();
}
}
UserAxeTest.java
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean_Zj.xml");
BeanScope beanScope=ctx.getBean("beanScope",BeanScope.class);
beanScope.init();
beanScope.say();
BeanScope beanScope1=ctx.getBean("beanScope",BeanScope.class);
beanScope1.say();
获取两次 beanScope 然后 第一次先调用init 再say,第二次 直接say
结果:
BeanScope say :1873859565from FFF
???? THIS IS OH date!
BeanScope say :1843289228from null
???? THIS IS OH date!
可以看出,是两个不同的实例。
第一次成功初始化,from FFF 第二次则为null。