@Service用于标注业务层组件
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注
如下是一个测试例子:
applicationContext.xml
<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/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- <context:annotation-config /> --> <context:component-scan base-package="com.zzt.test" /> </beans>
IUserService.java
package com.zzt.test;
public interface IUserService {
public void service();
}
UserServiceImpl.java
package com.zzt.test;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements IUserService {
@Override
public void service() {
System.out.println("service ...");
}
}
Person.java
package com.zzt.test;
public interface Person {
void testPerson();
}
Man.java
package com.zzt.test;
import org.springframework.stereotype.Component;
@Component//("man")
public class Man implements Person {
@Override
public void testPerson() {
System.out.println("===========man===========");
}
}
Woman.java
package com.zzt.test;
import org.springframework.stereotype.Component;
@Component//("woman")
public class Woman implements Person {
@Override
public void testPerson() {
System.out.println("===========woman=========");
}
}
用于测试的类:TestAction.java
package com.zzt.test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
@Controller
public class TestAction {
@Autowired
public IUserService userService;
@Autowired
@Qualifier("woman")
private Person person;
public void test() {
userService.service();
person.testPerson();
}
}
程序入口:Demo.java
package com.zzt.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Demo {
public static void main(String[] args) throws InterruptedException {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
TestAction action = (TestAction) context.getBean("testAction");
action.test();
}
}
getBean的默认名称是类名(头字母小 写),如果想自定义,可以@Service(“aaaaa”)这样来指定,这种bean默认是单例的,如果想改变,可以使用 @Service(“beanName”) @Scope(“prototype”)来改变。可以使用以下方式指定初始化方法和销毁方法(方法名任意):
@PostConstruct public void init() {
}
@PreDestroy public void destory() {
}
关于更多注解的使用,参考:http://www.iteye.com/topic/295348