1、@controller 控制器(注入服务) 2、@service 服务(注入dao) 3、@repository dao(实现dao访问) 4、@component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)
@Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进spring容器中管理。
下面写这个是引入component的扫描组件 <context:component-scan base-package=”com.mmnc”> 其中base-package为需要扫描的包(含所有子包) 1、@Service用于标注业务层组件 2、@Controller用于标注控制层组件(如struts中的action) 3、@Repository用于标注数据访问组件,即DAO组件. 4、@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。 @Service public class UserServiceImpl implements UserService { } @Repository public class UserDaoImpl implements UserDao { } getBean的默认名称是类名(头字母小写),如果想自定义,可以@Service(“***”) 这样来指定,这种bean默认是单例的,如果想改变,可以使用@Service(“beanName”) @Scope(“prototype”)来改变。可以使用以下方式指定初始化方法和销毁方法(方法名任意): @PostConstruct public void init() { }
1、@Resource的注解:
@Resource是J2EE的注解。意思是说在容器里面找相应的资源。也可以通过name属性指定它name的资源。可以注解到field或者setter上面 public class UserAction { private UserService userService; @Resource(name="userService") public void setUserService(UserService userService) { this.userService = userService; } public void addUser(){ userService.HelloWorld(); } } 2、@Component @Component和<context:component-scan base-package="com.spring"></context:component-scan>配合实现无XML配置,只通过注解配置及可将类放入资源容器中。 案例解析: 1、 xml文件:配置容器资源扫描的包 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <context:annotation-config/> <!-- 配置容器资源扫描的包 --> <context:component-scan base-package="com.spring"></context:component-scan> </beans> 2、 文件: 标注资源的注解@Component。括号里面指定的是存入容器的name属性为userService 那么将来我们拿的时候则getBean(“userService”)即可。如果我们不指定userService它默认存入容器bean的key为userServiceImpl这样就可以得到一个装有UserServiceImpl对象的容器 package com.spring.service; import org.springframework.stereotype.Component; import com.spring.dao.UserDao; @Component("userService") public class UserServiceImpl implements UserService{ private UserDao userDao; public void init(){ System.out.println("init"); } public void destory(){ System.out.println("destory"); } public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void HelloWorld(){ System.out.println("helloworld"); } } 通过@Resource将资源注入进来 因为上文已经配置了容器里面的资源。所以我这里将资源通过@Resource注解将资源注入到相关的属性。请看代码: @Component("userAction") public class UserAction { private UserService userService; //它会将beans的xml文件配置加入进去 //也可以使用name属性指定byName的指定 @Resource(name="userService") public void setUserService(UserService userService) { this.userService = userService; } public void addUser(){ userService.HelloWorld(); } } 测试实现: 通过上文配置的userAction案例来得到这个对象然后调用它里面的方法,因为上文通过了@ Component注解将UserAction的对象配置到了容器里面。所以获得容器之后就可以用这种方法getbean即可 @Test public void test01(){ BeanFactory applicationContext = new ClassPathXmlApplicationContext("beans.xml"); UserAction user = (UserAction) applicationContext.getBean("userAction"); user.addUser(); } @Scope和@PostConstruct、@PreDestroy 很简单就相当于前面讲到的作用于和initmethod和destorymethod请看下面代码。不再多说: @Scope("Singleton") @Component("userService") public class UserServiceImpl implements UserService{ private UserDao userDao; @PostConstruct public void init(){ System.out.println("init"); } @PreDestroy public void destory(){ System.out.println("destory"); } public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void HelloWorld(){ System.out.println("helloworld"); } }