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注解也可以正常运行。

 

原文地址:https://www.cnblogs.com/jiangwz/p/8610546.html

时间: 2024-10-09 15:02:01

Spring boot之SpringApplicationBuilder,@@Configuration注解,@Component注解的相关文章

Spring Boot 最核心的 25 个注解,都是干货!

Spring Boot 最核心的 25 个注解 1.@SpringBootApplication 这是 Spring Boot 最最最核心的注解,用在 Spring Boot 主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力. 其实这个注解就是 @SpringBootConfiguration.@EnableAutoConfiguration.@ComponentScan 这三个注解的组合,也可以用这三个注解来代替 @SpringBootAppli

Spring Boot 最核心的 25 个注解

1.@SpringBootApplication 这是 Spring Boot 最最最核心的注解,用在 Spring Boot 主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力. 其实这个注解就是@SpringBootConfiguration.@EnableAutoConfiguration.@ComponentScan这三个注解的组合,也可以用这三个注解来代替 @SpringBootApplication 注解. 2.@EnableAutoCo

自定义的Spring Boot starter如何设置自动配置注解

本文首发于个人网站:自定义的Spring Boot starter如何设置自动配置注解 在Spring Boot实战之定制自己的starter一文最后提到,触发Spring Boot的配置过程有两种方法: spring.factories:由Spring Boot触发探测classpath目录下的类,进行自动配置: @Enable:有时需要由starter的用户触发*查找自动配置文件的过程. 实战 接着上篇文章的例子,首先将spring.factories中的内容注释掉 #org.springf

【Spring Boot源码分析】@EnableAutoConfiguration注解(一)@AutoConfigurationImportSelector注解的处理

Java及Spring Boot新手,首次尝试源码分析,欢迎指正! 一.概述 @EnableAutoConfiguration注解是Spring Boot中配置自动装载的总开关.本文将从@EnableAutoConfiguration入手,尝试通过源码分析增强对Spring Boot的理解. 所用版本:Spring Boot 2.2.0.M5 + Spring Framework 5.2.0.RC1 1. 功能的实现:(Spring Boot部分) boot.autoconfigure.Enab

记录一次Spring boot 搭建框架连接Mysql数据库注解事务不回滚的故障

搭建了一个新框架,使用了spring boot 替换以简化原来繁杂的spring配置,使用Spring注解管理事务,持久层使用mybatis. 连接mysql数据库完成项目的过程中发现不支持事务,因为用的新框架自己本身也不是很了解,刚开始一直以为是自己的框架搭建的有问题, 后来发现是mysql数据库引擎的问题 解决方案 MyISAM不支持事物,InnoDB支持事物 先检查你的mysql版本 ,mysql 4.0系列之前是不支持事务的.    SELECT VERSION(); 检查你的数据库支持

spring boot 导入xml配置文件所需注解和禁用自动配置类的注解

导入XML配置 如果您绝对必须使用基于XML的配置,我们建议您仍然从一个@Configuration类开始.然后您可以使用@ImportResource注释来加载XML配置文件. 禁用特定的自动配置类 如果您发现不需要的特定自动配置类正在应用,则可以使用exclude属性@EnableAutoConfiguration来禁用它们,如以下示例所示: import org.springframework.boot.autoconfigure.*; import org.springframework

【spring boot+mybatis】注解使用方式(无xml配置)设置自动驼峰明明转换(),IDEA中xxDao报错could not autowire的解决方法

最近使用spring boot+mybatis,使用IntelliJ IDEA开发,记录一些问题的解决方法. 1.在使用@Mapper注解方式代替XXmapper.xml配置文件,使用@Select等注解配置sql语句的情况下,如何配置数据库字段名到JavaBean实体类属性命的自动驼峰命名转换? 使用spring boot后,越来越喜欢用注解方式进行配置,代替xml配置文件方式.mybatis中也可以完全使用注解,避免使用xml方式配置mapper.(参考  springboot(六):如何优

spring boot 注解大全

[springBoot系列]--springBoot注解大全 一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configuration和@EnableAutoConfiguration注解.其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文. @Configuration 等同于spring的XML配置文件:使用Java代码可以检查类型安全. @Enable

spring boot 注解

@RequestMapping 提供路由信息. @Controller 用于定义控制器类,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping. @ResponseBody 表示该方法的返回结果直接写入HTTP response body中. 一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解