注解是代码中特殊的标记,使用注解可以完成特定的功能。注解可以使用在类、方法或属性上,写法如:@注解名称(属性名称=属性值)
。
注:官方推荐使用注解
使用步骤
一、准备工作
1、导入jar包
- 导入基本的jar包:
commons-logging
、log4j
、spring-beans
、spring-context
、spring-core
、spring-expression
相关jar包。 - 导入AOP的jar包:
spring-aop
jar包。
2、创建类、方法
//例如User.java
package com.myw;
import org.springframework.stereotype.Component;
public class User {
public void add() {
System.out.println("User Add Method.");
}
}
3、创建Spring配置文件,引入约束;并开启注解扫描
<!--applicationContext.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.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--
开启注解扫描
(1)到包中扫描类、方法、属性上是否有注解
-->
<context:component-scan base-package="com.myw"></context:component-scan>
<!--
(2)只扫描属性上的注解
-->
<!--<context:annotation-config></context:annotation-config>-->
</beans>
二、注解创建对象
在创建对象的类上面使用注解实现,如:
@Component(value="user")
public class User {
...
}
注: value一般可以省略,直接写成@Component(“user”)
创建测试类 TestAnno.java和测试方法,如:
package com.myw;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestAnno {
@Test
public void runUser() {
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
User user = (User) context.getBean("user");
user.add();
}
}
除了上述提到的 @Component
注解外,Spring中还提供了@Component
的3个衍生注解,其功能就目前来说是一致的,均是为了创建对象。
- @Controller :WEB层
- @Service :业务层
- @Repository :持久层(不常用,一般使用
@Component
)
以单例或多实例方式创建对象,默认为单例,多例对象设置注解如下:
@Component(value="user")
@Scope(value="prototype")
public class User {
...
}
三、注解注入属性
案例:创建Service类和Dao类,并在Service中注入Dao对象。如下:
(1)创建Dao和Service对象
//UserDao.java
package com.myw;
import org.springframework.stereotype.Repository;
@Repository(value="userDao")
public class UserDao {
public void add() {
System.out.println("UserDao Add Method.");
}
}
//UserService.java
package com.myw;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service(value="userService")
public class UserService {
public void add() {
System.out.println("UserService Add Method.");
userDao.add();
}
}
(2)在Service类中定义UserDao类型的属性,并使用注解完成对象的注入
@Autowired
:自动注入或自动装配,是根据类名去找到类对应的对象来完成注入的。
@Autowired
private UserDao userDao;
或者 @Resource
@Resource(name="userDao")
private UserDao userDao;
注:
- 其中该注解的name属性值为注解创建Dao对象的value属性的值。这两种注解方式都不一定要为需要注入的属性定义set方法
- @Autowired注解默认是按类型进行装配的,如果我们想使用名称装配可以结合@Qualifier注解进行使用。而@Resource,默认按照名称进行装配,如果名称找不到,则使用类型装配
总结:
配置文件和注解混合使用
1)创建对象的操作一般使用配置文件方式实现;
2)注入属性的操作一般使用注解方式实现。