林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka
从Spring2.0以后的版本中,Spring也引入了基于注解(Annotation)方式的配置,注解(Annotation)是JDK1.5中引入的一个新特性,用于简化Bean的配置,某些场合可以取代XML配置文件。开发人员对注解(Annotation)的态度也是萝卜青菜各有所爱,个人认为注解可以大大简化配置,提高开发速度,同时也不能完全取代XML配置方式,XML方式更加灵活,并且发展的相对成熟,这种配置方式为大多数 Spring开发者熟悉;注解方式使用起来非常简洁,但是尚处于发展阶段,XML配置文件和注解(Annotation)可以相互配合使用。
1. @Component
使用@Component注解定义的Bean,默认的名称(id)是小写开头的非限定类名。如这里定义的Bean名称就是userDaoImpl。你也可以指定Bean的名称:
@Component("userDao")
@Component是所有受Spring管理组件的通用形式
package com.mucfc.daoimp;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import com.mucfc.dao.UserDao;
import com.mucfc.model.User;
@Component("userDao")
public class UserDaoImp implements UserDao{
@Override
public void add(User user) {
System.out.println(user.getName());
System.out.println(user.getSex());
System.out.println(user.getAge());
}
}相当于定义了一个bean:<bean id="userDao" class="com.mucfc.UserDaoImp"/>因为没有配置,我们必须告诉Spring容器启用类扫描机制并自动注入了:
<!-- 配置的bean所在包的位置 --> <context:component-scan base-package="com.mucfc" />1)@Component有个可选参数,指定Bean的名称@Component(“beanId”)
用法还是和以前一样
2、其他注释
Spring除了提供@Component注释外,还定义了几个注释:@Repository、@Service 和 @Controller。
在目前的Spring 2.5中,这3个注释和@Component是等效的,但是从注释类的命名上,很容易看出这3个注释分别和持久层、业务层和控制层(Web 层)相对应。虽然目前这3个注释和@Component相比没有什么新意,但Spring将在以后的版本中为它们添加特殊的功能。所以,如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用@Repository、@Service和 @Controller对分层中的类进行注释,而用@Component对那些比较中立的类进行注释。
User.java:
package com.mucfc.model;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
@Repository("user")
@Scope("prototype")
//@Repository用于标注数据访问组件,即DAO组件
//@Scope("prototype")让其每次返回不同的实例,默认是单例
public class User {
private String name;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private int age;
}
Userdao.java
package com.mucfc.dao;
import com.mucfc.model.User;
public interface UserDao {
public void add(User user);
}
UserDaoImp.java
package com.mucfc.daoimp;
import org.springframework.stereotype.Controller;
import com.mucfc.dao.UserDao;
import com.mucfc.model.User;
@Controller("userDao")
//@Controller用于标注控制层组件
public class UserDaoImp implements UserDao{
@Override
public void add(User user) {
System.out.println(user.getName());
System.out.println(user.getSex());
System.out.println(user.getAge());
}
}
UserService.javapackage com.mucfc.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.mucfc.dao.UserDao;
import com.mucfc.model.User;
@Service("userService")
//@Service用于标注业务层组件
public class UserService {
//setter注入接口、面向接口编程
private UserDao userdao ;
public void add(User user){
userdao.add(user) ;
}
public UserDao getUserdao() {
return userdao;
}
//注解
@Resource(name="userDao")
public void setUserdao(UserDao userdao) {
this.userdao = userdao;
}
}
配置beans.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 配置的bean所在包的位置 -->
<context:component-scan base-package="com.mucfc" />
</beans>
package com.mucfc.anno;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.mucfc.model.User;
import com.mucfc.service.UserService;
public class Test {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
UserService service=(UserService)applicationContext.getBean("userService");
User user1 = (User) applicationContext.getBean("user");
User user2 = (User) applicationContext.getBean("user");
user1.setName("小明");
user1.setSex("男");
user1.setAge(22);
user2.setName("小红");
user2.setSex("女");
user2.setAge(18);
service.add(user1);
service.add(user2);
}
}
@Service用于标注业务层组件
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka原文:http://blog.csdn.net/evankaka/article/details/45042397