spring注解扫描配置
2014-03-10 17:18
393 查看
spring的配置文件中配置:
当然,还可以配置调用的方法
控制层:
注:
@Resource(name="xxx") 其中xxx为若不写则为默认为接口实现类类名第一个字母小写
服务层:
以下内容来源于网络
-----------常用注解--------
--定义Bean的注解
@Controller
@Controller("Bean的名称")
定义控制层Bean,如Action
@Service
@Service("Bean的名称")
定义业务层Bean
@Repository
@Repository("Bean的名称")
定义DAO层Bean
@Component
定义Bean, 不好归类时使用.
--自动装配Bean (选用一种注解就可以)
@Autowired (Srping提供的)
默认按类型匹配,自动装配(Srping提供的),可以写在成员属性上,或写在setter方法上
@Autowired(required=true)
一定要找到匹配的Bean,否则抛异常。 默认值就是true
@Autowired
@Qualifier("bean的名字")
按名称装配Bean,与@Autowired组合使用,解决按类型匹配找到多个Bean问题。
@Resource JSR-250提供的
默认按名称装配,当找不到名称匹配的bean再按类型装配.
可以写在成员属性上,或写在setter方法上
可以通过@Resource(name="beanName") 指定被注入的bean的名称, 要是未指定name属性, 默认使用成员属性的变量名,一般不用写name属性.
@Resource(name="beanName")指定了name属性,按名称注入但没找到bean, 就不会再按类型装配了.
@Inject 是JSR-330提供的
按类型装配,功能比@Autowired少,没有使用的必要。
--定义Bean的作用域和生命过程
@Scope("prototype")
值有:singleton,prototype,session,request,session,globalSession
@PostConstruct
相当于init-method,使用在方法上,当Bean初始化时执行。
@PreDestroy
相当于destory-method,使用在方法上,当Bean销毁时执行。
--声明式事务
@Transactional
struts2巧妙实现0配置
省去一切struts2中Action的配置,当我们访问account/add.action时,自动调用AccountAction.add()方法。
如果我们想调用TestAction中的delete()方法,可以直接通过test/delete.action去调用。
在这里,我们采用的约定大于配置,如xxx/yyy.action,xxx对应Action的名字,此处对应xxxAction,yyy对应方法名.
<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" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 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 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd" default-lazy-init="true" default-autowire="byName"> <context:annotation-config /> <context:component-scan base-package="com.startdima.common.*"></context:component-scan> </beans>struts配置文件中配置:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.objectFactory" value="spring"></constant> <package name="user" extends="struts-default" namespace="/"> <action name="login" class="loginAction"> <result name="success">/main.jsp</result> <result name="error">/view/common/errorRedirect.jsp</result> </action> </package> </struts>注:name为strus2框架拦截的login请求路径,class为spring自动扫描注解@Controller("xxx")中的xxx名字,若不写则为默认的类名第一个字母小写
当然,还可以配置调用的方法
控制层:
package com.startdima.common.login.action; import javax.annotation.Resource; import org.springframework.stereotype.Controller; import com.opensymphony.xwork2.ActionSupport; import com.startdima.common.login.service.UserService; import com.startdima.common.pojo.TUser; /** * * @author qiss * 登陆 */ @Controller public class LoginAction extends ActionSupport { @Resource UserService uService;//为实现类service的接口 private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String execute() throws Exception { System.out.println("测试,登陆成功"); TUser tUser= uService.findUser("sss", "fff"); System.out.println(tUser.getName()); return "success"; } }
注:
@Resource(name="xxx") 其中xxx为若不写则为默认为接口实现类类名第一个字母小写
服务层:
package com.startdima.common.login.service; import java.util.List; import com.startdima.common.exception.LoginException; import com.startdima.common.pojo.TUser; /** * * @author qiss * */ public interface UserService { public TUser findUser(String name, String password) throws LoginException; }
package com.startdima.common.login.service.impl; import org.springframework.stereotype.Service; import com.startdima.common.exception.LoginException; import com.startdima.common.login.dao.UserDao; import com.startdima.common.login.dao.impl.UserDaoimpl; import com.startdima.common.login.service.UserService; import com.startdima.common.pojo.TUser; /** * * @author qiss * */ @Service public class UserServiceImpl implements UserService { private UserDao userDao=new UserDaoimpl(); public void setKhuserDao(UserDao userDao) { this.userDao = userDao; } public TUser findUser(String name, String password) throws LoginException { TUser user=null; try { // user=userDao.checkUser(name, password); } catch (Exception e) { e.printStackTrace(); } //测试代码 user=new TUser(); user.setName("aaa"); return user; } }
以下内容来源于网络
-----------常用注解--------
--定义Bean的注解
@Controller
@Controller("Bean的名称")
定义控制层Bean,如Action
@Service
@Service("Bean的名称")
定义业务层Bean
@Repository
@Repository("Bean的名称")
定义DAO层Bean
@Component
定义Bean, 不好归类时使用.
--自动装配Bean (选用一种注解就可以)
@Autowired (Srping提供的)
默认按类型匹配,自动装配(Srping提供的),可以写在成员属性上,或写在setter方法上
@Autowired(required=true)
一定要找到匹配的Bean,否则抛异常。 默认值就是true
@Autowired
@Qualifier("bean的名字")
按名称装配Bean,与@Autowired组合使用,解决按类型匹配找到多个Bean问题。
@Resource JSR-250提供的
默认按名称装配,当找不到名称匹配的bean再按类型装配.
可以写在成员属性上,或写在setter方法上
可以通过@Resource(name="beanName") 指定被注入的bean的名称, 要是未指定name属性, 默认使用成员属性的变量名,一般不用写name属性.
@Resource(name="beanName")指定了name属性,按名称注入但没找到bean, 就不会再按类型装配了.
@Inject 是JSR-330提供的
按类型装配,功能比@Autowired少,没有使用的必要。
--定义Bean的作用域和生命过程
@Scope("prototype")
值有:singleton,prototype,session,request,session,globalSession
@PostConstruct
相当于init-method,使用在方法上,当Bean初始化时执行。
@PreDestroy
相当于destory-method,使用在方法上,当Bean销毁时执行。
--声明式事务
@Transactional
struts2巧妙实现0配置
省去一切struts2中Action的配置,当我们访问account/add.action时,自动调用AccountAction.add()方法。
如果我们想调用TestAction中的delete()方法,可以直接通过test/delete.action去调用。
在这里,我们采用的约定大于配置,如xxx/yyy.action,xxx对应Action的名字,此处对应xxxAction,yyy对应方法名.
web.xml
<filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <!-- springListener --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
applicationContext.xml
<context:annotation-config></context:annotation-config> <context:component-scan base-package="com.example"></context:component-scan>
struts.xml,此部分是关键
<constant name="struts.i18n.encoding" value="GBK"></constant> <constant name="struts.objectFactory" value="spring"></constant> <constant name="struts.enable.SlashesInActionNames" value="true"></constant> <package name="restful" extends="struts-default"> <action name="*/*" class="{1}Action" method="{2}"> <result name="success">${forward_page}</result> <result name="redirect" type="redirect">${redirect_page}</result> </action> </package>
BaseAction(简化Action的使用)
public class BaseAction { public static final String SUCCESS = "success"; public static final String REDIRECT = "redirect"; private String forward_page; private String redirect_page; //转发 public String forward(String viewPath) { forward_page = viewPath; return SUCCESS; } //重定向 public String redirect(String viewPath) { redirect_page = viewPath; return REDIRECT; } //添加属性 public BaseAction addAttr(String key, Object value) { Map<String, Object> request = (Map<String, Object>) ActionContext .getContext().get("request"); request.put(key, value); return this; } public String getForward_page() { return forward_page; } public String getRedirect_page() { return redirect_page; } }
自定义的Action,需要继承BaseAction
@Controller public class AccountAction extends BaseAction { public String add() { //转发 return forward("/add.jsp"); } public String get() { //重定向 return redirect("get.jsp"); } public String list() { @SuppressWarnings("unchecked") List list = new ArrayList(); int count = 10; // 添加属性及跳转 return addAttr("list", list).addAttr("count", count).forward( "/list.jsp"); } }
相关文章推荐
- Spring-基于注解的配置[01定义Bean+扫描Bean]
- 使用spring注解 自动装配以及自动扫描机制 实现零xml配置的前提
- Spring Bean定义总结:配置文件手写Bean PK 组建扫描用注解
- Spring 3.0 学习-DI 依赖注入_创建Spring 配置-使用一个或多个XML 文件作为配置文件,使用自动注入(byName),在代码中使用注解代替自动注入,使用自动扫描代替xml中bea
- Spring整理系列 - @Configuration注解、@Bean注解以及配置自动扫描、bean作用域
- 使用spring注解 自动装配以及自动扫描机制 实现零xml配置的前提
- maven 项目(三)引申--spring集成hibernate+JPA事务配置(扫描注解)
- Spring注解-@Configuration注解、@Bean注解以及配置自动扫描、bean作用域
- maven 项目(三) spring集成mybatis事务配置(扫描注解)
- Spring整理系列(11)——@Configuration注解、@Bean注解以及配置自动扫描、bean作用域 发表于2016/8/11 15:16:16 10628人阅读 分类: Spring
- Spring配置文件中component-scan 扫描指定的包中的类上常用的注解
- Spring注解-@Configuration注解、@Bean注解以及配置自动扫描、bean作用域
- 使用spring注解 自动装配以及自动扫描机制 实现零xml配置的前提
- 使用spring注解 自动装配以及自动扫描机制 实现零xml配置的前提
- [转]Spring注解-@Configuration注解、@Bean注解以及配置自动扫描、bean作用域
- Spring 标签 @Configuration注解、@Bean注解以及配置自动扫描、bean作用域
- spring 注解扫描bean配置
- 转-spring-boot 注解配置mybatis+druid(新手上路)-http://blog.csdn.net/sinat_36203615/article/details/53759935
- Spring基础篇——通过Java注解和XML配置装配bean
- Spring_02 注入类型值、利用引用注入类型值、spring表达式、与类相关的注解、与依赖注入相关的注解、注解扫描