spring注解扫描配置

spring的配置文件中配置:

<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");  
    }  
  
}  





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值