Spring中bean就是java的所有类,spring提供一个容器将其中的所有bean串起来。
一、spring的注入方式:
1.通过bean.xml等配置文件;实例化bean的过程还需要AplicationContent 实现。
public static void main(String[] args) { String[] locations = {"beans.xml"}; ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(locations); Boss boss = (Boss) ctx.getBean("boss"); System.out.println(boss); ctx.destroy();// 关闭 Spring 容器,以触发 Bean 销毁方法的执行 } |
2.通过注解的方式 @Autowired 标记引用 @Service 标记实现接口的类 它们之间的映射关系通过Spring内置实现。注解的的优点是标示后即可用,省去了实例化ApplicationContent的操作,实现了自动完成(需要增加component-scan配置)。
二、相关注解说明
1.@Service注释表示定义一个bean,自动根据bean的类名实例化一个首写字母为小写的bean,例如Chinese实例化为chinese,American实例化为american,如果需要自己改名字则:@Service("你自己改的bean名")。
2.@Autowired和@Qualifier注释使得接口可以被容器注入 相当于实现ApplicationContext和对象实例化(注入)
3.@Resource 的作用相当于 @Autowired,只不过 @Autowired 按 byType 自动注入,而 @Resource 默认按 byName 自动注入罢了。@Resource 有两个属性是比较重要的,分别是 name 和 type,Spring 将 @Resource 注释的 name 属性解析为 Bean 的名字,而 type 属性则解析为 Bean 的类型。所以如果使用 name 属性,则使用 byName 的自动注入策略,而使用 type 属性时则使用 byType 自动注入策略。如果既不指定 name 也不指定 type 属性,这时将通过反射机制使用 byName 自动注入策略。
4.@Component 注释就可以将一个类定义了 Spring 容器中的 Bean。还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和 @Controller。在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层、业务层和控制层(Web 层)相对应。
@Service用于标注业务层组件
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
为什么相同功能要分层,可能在后续的spring版本中会提供区别的处理。5.@Scope 指定 Bean 的作用范围 - @Scope("prototype")-非单例
来源:https://www.cnblogs.com/joseph_zheng/p/6566946.html