@Service
@Service对应的是业务层Bean,例如:
@Service("userService") public class UserServiceImpl implements UserService { ……… }
@Controller
@Controller对应表现层的Bean,也就是Action,例如:
@Controller
@Scope("prototype") public class UserAction extends BaseAction<User>{ …… }
@Scope
@Scope("prototype")表示将Action的范围声明为原型,可以利用容器的scope="prototype"来保证每一个请求有一个单独的Action来处理,避免struts中Action的线程安全问题。spring 默认scope 是单例模式(scope="singleton"),这样只会创建一个Action对象,每次访问都是同一Action对象,数据不安全,struts2 是要求每次次访问都对应不同的Action,scope="prototype" 可以保证当有请求的时候都创建一个Action对象
@Autowired
默认按照类型装配,默认情况下它要求依赖对象必须存在如果允许为null,可以设置它required属性为false,如果我们想使用按照名称装配,可 以结合@Qualifier注解一起使用
@Resource
(1)、@Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配
(2)、指定了name或者type则根据指定的类型去匹配bean
(3)、指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错
@Autowired与@Resource的区别
(1)、@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配
(2)、@Autowired是Spring的注解,@Resource是J2EE的注解,这个看一下导入注解的时候这两个注解的包名就一清二楚了
@Qualifier
@Autowired是根据类型进行自动装配的。例如,如果当Spring上下文中存在不止一个UserDao类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存在UserDao类型的bean,也会抛出BeanCreationException异常。我们可以使用@Qualifier配合@Autowired来解决这些问题。如下:
1). 可能存在多个UserDao实例
Java代码
- @Autowired
- @Qualifier("userServiceImpl")
- public IUserService userService;
或者
Java代码
@Component
- @Autowired
- public void setUserDao(@Qualifier("userDao") UserDao userDao) {
- this.userDao = userDao;
- }
@Component注解(不建议使用)
@Override
@ResponseBody
@RequestMapping
@Aspect
@Pointcut
@Around
@value
Spring 3支持@value注解的方式获取properties文件中的配置值,大简化了读取配置文件的代码
用法如下:
@Value("${user_id}")private String user_id; //配置文件config.properties中的id配置值
@value需要参数,这里参数可以是两种形式:
@Value("#{configProperties['user_id']}")或者@Value("${user_id}");
我们来看看如何使用这两形式,在配置上有什么区别:
1、@Value("#{configProperties['t1.msgname']}")这种形式的配置中有“configProperties”,其实它指定的是配置文件的加载对象:配置如下:
<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:/config/user.properties</value>
</list>
</property>
</bean>
这样配置就可完成对属性的具体注入了;
user.properties内容:
user_id=1001019
2、@Value("${user_id}")这种形式不需要指定具体加载对象,需要一个关键的对象来完成PreferencesPlaceholderConfigurer,这个对象的配置可以利用上面配置1中的配置,也可以自己直接自定配置文件路径。
如果使用配置1中的配置,可以写成如下情况:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="properties" ref="configProperties"/>
</bean>
如果直接指定配置文件的话,可以写成如下情况:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="location">
<value>config/t1.properties</value>
</property>
</bean>
@RequestParam
@ModelAttribute
@Cacheable
@CacheFlush
@Required
@SessionAttributes
未完。。。。。。继续整理中。。。。。。