Spring boot之SpringApplicationBuilder,@@Configuration注解,@Component注解

Posted 谁将新樽辞旧月,今月曾经照古人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring boot之SpringApplicationBuilder,@@Configuration注解,@Component注解相关的知识,希望对你有一定的参考价值。

SpringApplicationBuilder:

该方法的作用是可以把项目打包成war包

需要配置启动类,pom.xml文件等,具体见:http://blog.csdn.net/linzhiqiang0316/article/details/52601292

@SpringBootApplication
public class FavoritesApplication extends SpringBootServletInitializer{

    /**
     * 如此配置打包后可以用tomcat下使用
     * @param application
     * @return
     */
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(FavoritesApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(FavoritesApplication.class, args);
    }
}

 

 

@Configuration注解:

从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

@Configuration
public class WebConfiguration  {
    
    @Bean
    public FilterRegistrationBean filterRegistration() {

        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new SecurityFilter());
        registration.addUrlPatterns("/*");
        registration.addInitParameter("paramName", "paramValue");
        registration.setName("MyFilter");
        registration.setOrder(1);
        return registration;
    }

}
public class SecurityFilter implements Filter {

    protected Logger logger = Logger.getLogger(this.getClass());
    private static Set<String> GreenUrlSet = new HashSet<String>();

    @Autowired
    private UserRepository userRepository;

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
        GreenUrlSet.add("/login");
        GreenUrlSet.add("/register");
        GreenUrlSet.add("/index");
        GreenUrlSet.add("/forgotPassword");
        GreenUrlSet.add("/newPassword");
        GreenUrlSet.add("/tool");
    }

    @Override
    public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain)
            throws IOException, ServletException {
        // TODO Auto-generated method stub
        HttpServletRequest request = (HttpServletRequest) srequest;
        String uri = request.getRequestURI();
        if (request.getSession().getAttribute(Const.LOGIN_SESSION_KEY) == null) {
            Cookie[] cookies = request.getCookies();
            if (containsSuffix(uri)  || GreenUrlSet.contains(uri) || containsKey(uri)) {
                logger.debug("don‘t check  url , " + request.getRequestURI());
                filterChain.doFilter(srequest, sresponse);
                return;
            }else if (cookies!=null) {
                boolean flag = true;
                for (int i = 0; i < cookies.length; i++) {
                    Cookie cookie = cookies[i];
                    if (cookie.getName().equals(Const.LOGIN_SESSION_KEY)) {
                        if(StringUtils.isNotBlank(cookie.getValue())){
                            flag = false;
                        }else{
                            break;
                        }
                        String value = getUserId(cookie.getValue());
                        Long userId = 0l;
                        if (userRepository == null) {
                            BeanFactory factory = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
                            userRepository = (UserRepository) factory.getBean("userRepository");
                        }
                        if(StringUtils.isNotBlank(value)){
                            userId = Long.parseLong(value);
                        }
                        User user = userRepository.findOne(userId);
                        String html = "";
                        if(null == user){
                            html = "<script type=\"text/javascript\">window.location.href=\"_BP_login\"</script>";
                        }else{
                            logger.info("userId :" + user.getId());
                            request.getSession().setAttribute(Const.LOGIN_SESSION_KEY, user);
                            String referer = this.getRef(request);
                            if(referer.indexOf("/collect?") >= 0 || referer.indexOf("/lookAround/standard/") >= 0
                                    || referer.indexOf("/lookAround/simple/") >= 0){
                                filterChain.doFilter(srequest, sresponse);
                                return;
                            }else{
                                html = "<script type=\"text/javascript\">window.location.href=\"_BP_\"</script>";
                            }
                        }
                        html = html.replace("_BP_", Const.BASE_PATH);
                        sresponse.getWriter().write(html);
                        /**
                         * HttpServletResponse response = (HttpServletResponse) sresponse;
                         response.sendRedirect("/");
                         */
                    }
                }
                if(flag){
                    //跳转到登陆页面
                    String referer = this.getRef(request);
                    logger.debug("security filter, deney, " + request.getRequestURI());
                    String html = "";
                    if(referer.contains("/collect?") || referer.contains("/lookAround/standard/")
                            || referer.contains("/lookAround/simple/")){
                        html = "<script type=\"text/javascript\">window.location.href=\"_BP_login\"</script>";
                    }else{
                        html = "<script type=\"text/javascript\">window.location.href=\"_BP_index\"</script>";
                    }
                    html = html.replace("_BP_", Const.BASE_PATH);
                    sresponse.getWriter().write(html);
                }
            }else{
                //跳转到登陆页面
                String referer = this.getRef(request);
                logger.debug("security filter, deney, " + request.getRequestURI());
                String html = "";
                if(referer.contains("/collect?") || referer.contains("/lookAround/standard/")
                        || referer.contains("/lookAround/simple/")){
                    html = "<script type=\"text/javascript\">window.location.href=\"_BP_login\"</script>";
                }else{
                    html = "<script type=\"text/javascript\">window.location.href=\"_BP_index\"</script>";
                }
                html = html.replace("_BP_", Const.BASE_PATH);
                sresponse.getWriter().write(html);
                //    HttpServletResponse response = (HttpServletResponse) sresponse;
                //response.sendRedirect("/");

            }
        }else{
            filterChain.doFilter(srequest, sresponse);
        }
    }



    /**
     * @param url
     * @return
     * @author neo
     * @date 2016-5-4
     */
    private boolean containsSuffix(String url) {
        if (url.endsWith(".js")
                || url.endsWith(".css")
                || url.endsWith(".jpg")
                || url.endsWith(".gif")
                || url.endsWith(".png")
                || url.endsWith(".html")
                || url.endsWith(".eot")
                || url.endsWith(".svg")
                || url.endsWith(".ttf")
                || url.endsWith(".woff")
                || url.endsWith(".ico")
                || url.endsWith(".woff2")) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * @param url
     * @return
     * @author neo
     * @date 2016-5-4
     */
    private boolean containsKey(String url) {

        if (url.contains("/media/")
                || url.contains("/login")||url.contains("/user/login")
                || url.contains("/register")||url.contains("/user/regist")||url.contains("/index")
                || url.contains("/forgotPassword")||url.contains("/user/sendForgotPasswordEmail")
                || url.contains("/newPassword")||url.contains("/user/setNewPassword")
                || (url.contains("/collector") && !url.contains("/collect/detail/"))
                || url.contains("/collect/standard/")||url.contains("/collect/simple/")
                || url.contains("/user")||url.contains("/favorites")||url.contains("/comment")
                || url.startsWith("/lookAround/standard/")
                || url.startsWith("/lookAround/simple/")
                || url.startsWith("/user/")
                || url.startsWith("/feedback")
                || url.startsWith("/standard/")
                || url.startsWith("/collect/standard/lookAround/")
                || url.startsWith("/collect/simple/lookAround/")) {
            return true;
        } else {
            return false;
        }
    }



    @Override
    public void destroy() {
        // TODO Auto-generated method stub
    }

    public  String codeToString(String str) {
        String strString = str;
        try {
            byte tempB[] = strString.getBytes("ISO-8859-1");
            strString = new String(tempB);
            return strString;
        } catch (Exception e) {
            return strString;
        }
    }

    public String getRef(HttpServletRequest request){
        String referer = "";
        String param = this.codeToString(request.getQueryString());
        if(StringUtils.isNotBlank(request.getContextPath())){
            referer = referer + request.getContextPath();
        }
        if(StringUtils.isNotBlank(request.getServletPath())){
            referer = referer + request.getServletPath();
        }
        if(StringUtils.isNotBlank(param)){
            referer = referer + "?" + param;
        }
        request.getSession().setAttribute(Const.LAST_REFERER, referer);
        return referer;
    }

    public String getUserId(String value){
        try {
            String userId = Des3EncryptionUtil.decode(Const.DES3_KEY,value);
            userId = userId.substring(0,userId.indexOf(Const.PASSWORD_KEY));
            return userId;
        }catch (Exception e){
            logger.error("解析cookie异常:",e);
        }
        return null;
    }
}

 

 

@Component:

关于Spring的@Component、@Repository、@Service、@Controller四个注解的区别,查阅了spring的官方文档:http://spring.io/search,文档中只是说了组件的注解要在组件处,service的注解要用在service处,但是他们的定义却没有区别。
问题:
1.那既然没有区别,为什么要分开来定义四个注解呢?
2.既然如他定义中说的,使用具体场景如下:

@Repository注解:用于标注数据访问组件,即DAO组件
@Service注解:用于标注业务层组件
@Controller注解:用于标注控制层组件(如struts中的action)
@Component注解:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。       

@Service

public class UserServiceImpl implements UserService { }           

@Repository

public class UserDaoImpl implements UserDao { } getBean的默认名称是类名(头字母小写),如果想自定义,可以@Service(“***”)              

这样来指定,这种bean默认是单例的,如果想改变,可以使用@Service(“beanName”)           

@Scope(“prototype”)来改变。可以使用以下方式指定初始化方法和销毁方法(方法名任意): @PostConstruct public void init() { } 

总结:

1.用IDEA时,dao层没有注解idea会在service实现层的声明这个dao报错,加上这些注解之后就不会提示错误了,但是可以运行没有问题。

2.以上注解的作用基本相同,不同是标注这是什么层面,经过测试在dao层使用controller注解也可以正常运行。

 

 

 

 

 




以上是关于Spring boot之SpringApplicationBuilder,@@Configuration注解,@Component注解的主要内容,如果未能解决你的问题,请参考以下文章

第一个helloworld,有点小兴奋

spring boot 2.0之使用spring boot

Spring Boot 2.X - Spring Boot整合AMQP之RabbitMQ

spring boot 系列之四:spring boot 整合JPA

spring boot 之依赖

Spring Boot参考教程Spring Boot配置使用之配置文件用法