Spring 注解配置Bean

一、使用注解配置Bean 1、注解

  在类定义、方法定义、成员变量定义前使用。其简化<bean>标签,功能同<bean>标签。
格式为:
  @注解标记名。

2、组件扫描

  Spring可以从classpath(类路径)下自动扫描、实例化具有特殊注解的组件。
常用注解:
(1)@Repository   一般用于数据访问(数据访问(持久)层组件,实现dao访问)
(2)@Service    一般用于服务(业务层组件,处理业务逻辑,比如注入并操作dao)
(3)@Controller    一般用于控制器(控制层组件)
(4)@Component    一般用于自定义组件,把普通类实例化到spring容器中,相当于配置文件中的<bean />
(5)@Scope    用于控制对象创建,默认为单例模式。
(6)@PostConstruct    用于指定init-method方法。
(7)@PreDestroy    指定destroy-method方法。
(8)@Resource    用于注入bean对象
(9)@Autowired   基本等价于 @Resource
(10)@Qualifier("XXX")    与@Autowired连用,强制按名称匹配。
(11)@value("")    Spring表达式注入。

需要在xml文件中配置自动扫描。

需要在applicationContext.xml中开启自动扫描。 其中base-package填写的是需要扫描的包名(可以只写一部分,比如base-package="com",那么将会扫描以com开头的所有包)。多个包名间用逗号(,)隔开。 <beans> <context:component-scan base-package="com.test"></context:component-scan> </beans>

对于扫描到的类,Spring默认命名为首字母小写。

即 @Controller public class LoginController{ } 等价于 <bean/>

3、@component

  第一种形式:直接在类的前面写@component,其会自动将类名当做id,且首字母小写。

package com.test; import org.springframework.stereotype.Component; /** * 扫描ExampleBean组件,默认id=exampleBean * 相当于<bean ></bean> * 注:id名的首字母小写。 */ @Component public class ExampleBean { public void execute() { System.out.println("执行execute处理方法1"); } }

  第二种形式:自定义id名。

package com.test; import org.springframework.stereotype.Component; /** * 相当于<bean ></bean> * */ @Component("test") public class ExampleTest { public void show() { System.out.println("hello world"); } }

4、@Scope

  默认为单例模式(根据同一个id,getBean获取的都是同一个对象),可以采用@Scope("prototype") 来将其变成原型模式(根据同一个id,getBean获取的都是不同的对象)。

package com.test; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; /** * 扫描ExampleBean组件,默认id=exampleBean * 相当于<bean ></bean> * 注:id名的首字母小写。 */ @Component @Scope("prototype") //等价于<bean scope="prototype"> public class ExampleBean { public void execute() { System.out.println("执行execute处理方法1"); } }

5、@PostConstruct

  设置初始化方法。

package com.test; import Javax.annotation.PostConstruct; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @Component @Scope("prototype") //等价于<bean scope="prototype"> public class ExampleBean { public void execute() { System.out.println("执行execute处理方法1"); } @PostConstruct //等价于<bean init-method="init"> public void init() { System.out.println("初始化"); } }

6、@PreDestroy

  设置销毁方法。

package com.test; import javax.annotation.PostConstruct; import org.springframework.stereotype.Component; @Component public class ExampleBean { public void execute() { System.out.println("执行execute处理方法1"); } @PostConstruct //等价于<bean init-method="init"> public void init() { System.out.println("初始化"); } @PreDestroy //等价于<bean destory-method="destory"> public void destory() { System.out.println("释放资源"); } }

7、@Resource

  其可以写在变量定义前,也可以写在setXXX方法前。@Resource默认按照ByName自动注入。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。
  其导入包:import javax.annotation.Resource;
注:
  使用注解时,若@Resource注解写在变量定义前,那么setXXX方法可以不写。
  但若是在xml文件中采用<bean>标签的set注入,需要实现setXXX方法。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/c94faeb61c77cd98dc8eed641508a335.html