精华内容
参与话题
问答
  • Sping

    2019-09-11 15:32:40
    这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、...

    一、什么是Spring

    spring是一个full-stack(全栈式)轻量级开源框架。主要作用是创建和管理对象,实现解耦,简化开发。

    二、Spring的核心

    获取对象

    在Spring的配置文件中,通过bean节点来实现对象的创建。

    1. 通过无参构造创建对象在这里插入图片描述
    2. 通过静态工厂getInstance( )创建对象(少用)
    3. 通过实例工厂创建对象(少用)
    4. 通过组件扫面和注解获得组件对象,在后面介绍

    由Spring管理的对象的作用域

    • 单例:单一的实例,即在同一时刻,某个类的对象是唯一的!scope=“singleton”。
      • 懒汉式:默认,需要使用时,才创建。
      • 饿汉式:随着容器创建而创建,通过调整lazy-init=“true”。
    • 非单例:scope=“prototype”。

    对象的生命周期

    Spring对象管理的单例对象,存在则生命周期问题,开发者可以在任何自定义的、由Spring管理的类中添加初始化方法和销毁方法,方法必须是void和无参数的,例如:

    public class Stduent {
    
        // 初始化方法
        public void init() {
            System.out.println("Student.init()");
        }
    
        // 销毁方法
        public void destroy() {
            System.out.println("Student.destroy()");
        }
    
    }
    
    <bean id="student"
        class="cn.tedu.spring.Student"
        init-method="init"
        destroy-method="destroy">
    </bean>
    

    IoC(控制反转)

    使用spring框架后,创建对象将由传统的new语法改变为通过Spring容器获取对象,这就是IoC。
    其中为了保证获取的对象是有值的,就需要用到DI(依赖注入)。

    DI(依赖注入)

    依赖注入通常有以下几种方式:

    1.SET方式注入:为属性注入值时,如果类型是基本型,使用value进行配置,如果类型是引用,需要配置另一个bean来创建值的对象,然后通过ref进行配置。
    1. set方法参数为基本数据类型或String
      在这里插入图片描述
    2.set方法参数为其他应用类型
    在这里插入图片描述
    3.set方法参数集合类型时(List , Set , Map , Properties)
    <bean id="sampleBean"
        class="cn.tedu.spring.SampleBean">
        <property name="names">
            <list>
                <value>Jame</value>
                <value>Lucy</value>
                <value>David</value>
                <value>Tom</value>
                <value>Alex</value>
            </list>
        </property> 
    </bean>
    
    <property name="cities">
        <set>
            <value>Hangzhou</value>
            <value>Beijing</value>
            <value>Shanghai</value>
            <value>Shenzhen</value>
            <value>Guangzhou</value>
        </set>
    </property> 
    
    <property name="session">
        <map>
            <entry key="username" value="Jack"/>
            <entry key="password" value="1234"/>
            <entry key="from" value="Nanjing"/>
        </map>
    </property>
    
    //此为直接注入
    <property name="dbConfig">
        <props>
            <prop key="name">Jack</prop>
            <prop key="age">18</prop>
        </props>
    </property>
    
    //或者先通过Spring容器扫描相应的properties文件,在进行注入
    
    //如有个db.properties文件,其内容为
    url=jdbc:mysql://192.168.0.251:3306/db_name?useUnicode=true&characterEncoding=utf8
    driver=com.mysql.jdbc.Driver
    username=root
    password=root
    initialSize=2
    maxActive=10
    //读取上述文件
    <util:properties id="config"
        location="classpath:db.properties">
    </util:properties>
    //注入
    <property name="dbConfig"
        ref="config">
    </property>
    
    

    2.自动装配
    自动装配有多种,一种为byName,还有一种byType
    在这里插入图片描述
    3.(带参)构造方法注入(不常用)
    在这里插入图片描述

    Spring表达式

    Spring表达式的基本格式是#{名称},用于表示某个值,甚至,值可以是来自另一个的某个属性!

    当某个注入的属性值是通过Spring表达式得到的,则应该配置为value=#{}格式。

    关于Spring表达式:

    • 如果获取另一个中的某属性值,则使用#{bean-id.属性名};

    • 如果获取另一个中的某List集合中的某个值,则使用#{bean-id.List集合名[索引]};

    • 如果获取另一个中的某Map集合中的某个值,则使用#{bean-id.Map集合名.key},
      还可以是#{bean-id.Map集合名[‘key’]}。

    Spring注解(Annotation)

    预备工作:开启组件扫描

    在Spring的配置文件中添加:

    <context:component-scan  base-package="cn.tedu.spring.dao" />
    
    组件相关的注解(类前添加)
    • @Component :通用组件类
    • @Controller :控制器类
    • @Service :业务类
    • @Repository :数据访问类/持久层处理的类
    作用域与生命周期相关的注解
    • @Scope(“singleton/prototype”)(类前添加)
    • @Lazy(“true/false”)(类前添加)
    • @PostConstruct(方法前添加)
    • @PreDestroy(方法后添加)
    自动装配(属性前添加)
    • @Autowired(Spring框架环境)
    • @Resource(Java EE环境)

    AOP(面向切面编程)

    通俗的说,就是指定某些数据处理流程(甚至是所有数据处理流程)都会执行某些方法。
    简单的AOP的实现:

    @Component
    @Aspect
    public class TimeElapseAspect {
    
        @Around("execution(* cn.tedu.store.service.impl.*.*(..))")
        public Object doAround(
                ProceedingJoinPoint pjp) 
                    throws Throwable {
            // 在业务方法之前执行的代码
            long start = System.currentTimeMillis();
    
            // 执行业务方法,表示执行任何一个应用范围之内的方法
            Object obj = pjp.proceed();
    
            // 在业务方法之后执行的代码
            long end = System.currentTimeMillis();
            System.err.println(
                "执行时间:" + (end - start) + "ms.");
    
            // 返回
            return obj;
        }
    
    }
    
    展开全文
  • sping

    2019-07-16 23:25:08
    avigator 包含客户端浏览器的信息。 AJAX = Asynchronous JavaScript and XML. AJAX 是一种创建快速动态网页的技术。 servlet解决中文乱码的方法: ...页面的跳转用res.sendRedirect("xxx")来实现,xxx...

     

    avigator 包含客户端浏览器的信息。
    
    AJAX = Asynchronous JavaScript and XML.
    AJAX 是一种创建快速动态网页的技术。
    
    
    
    servlet解决中文乱码的方法:
    res.setContentType("text/html;charset=gbk");
    页面的跳转用res.sendRedirect("xxx")来实现,xxx是xml文件里要跳转的servlet对应的url名字。
    
    
     //servlet提供了两种,sendRedirect转向 、forward转发  
     //sendRedirect的url应该这样写 : /web应用名称/servlet的url  
     response.sendRedirect("/UsersManager/MainFrame");  
     
    
    web.xml 增加配置处理乱码
    load-on-startup
    
    
    eclipse 创建 hello-servlet.xml new时没有spring xml选项。
    没有namespaces选项 选中beans context mvc 一般加这3个ok
    
    system.out.println  快速输入
    
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!-- 前缀 -->
            <property name="prefix" value="view/"></property>
            <!-- 后缀 -->
            <property name="suffix" value=".jsp"></property>
        </bean>
    设置ViewResolver时,WebContent是工作目录
    prefix + view + suffix=> view/index.jsp
    
    
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
     /表示任意的请求都通过springmvc来处理
    
    
    
    spring mvc视频
    http://www.icoolxue.com/album/show/39
    
    Model model;
    隐式类型
    model.addAttribute(username); => model.addAttribute("string", username);
    model.addAttribute(new User()); => model.addAttribute("User", new User());

     

    转载于:https://www.cnblogs.com/muhe221/p/6285761.html

    展开全文
  • Sping MVC

    2013-09-29 10:18:42
    对于Spring mvc的理解,最好能有例子,谢谢。。还有与普通的mvc有什么区别?Spring MVC是在哪里体现的
  • sping quartz例子

    2014-08-12 22:36:03
    spring sping quartz实例和相应的包
  • spingmvc+hibernate+sping

    2015-12-22 22:28:10
    sping+spingmvc+hibernate 在学习的时候毕业前夕自己根据资料和以前自己写的项目整合的套,对包哪些进行了选择,主要对事物aop的配置进行了配置,个人感觉不错,共享下,另外还对spingmvc,mybatis的整合项目也有,在...
  • sping-security.xml配置文件 ``` xmlns:security="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=...
  • 校园商铺平台采用流行的SSM(Sping,Sping MVC,MyBatis)框架开发,采用Maven管理资源,适合学习和二次开发,另外原来还有完整的一步一步带着做出这个项目的16章视频,文件内有视频获取方式。
  • _____________sping.cmd written by liuying_____________ ========================================================================== *主机名* *日期与时间* *时延* CTRL+C结束 -------------------------...
  • 关于sping quartz理解

    千次阅读 2017-04-21 09:52:56
    一直以为自己理解spring quartz,忽然最近几天发现自己理解的不对,在4月18号的时候,我执行了一个spring quartz的计划如下1 0 0 */3 * ? 本来我以为需要等到21号会执行,没想到第二天就是4月19号他就执行了,我在4...
    一直以为自己理解spring quartz,忽然最近几天发现自己理解的不对,在4月18号的时候,我执行了一个spring quartz的计划如下
    1 0 0 */3 * ?

    本来我以为需要等到21号会执行,没想到第二天就是4月19号他就执行了,我在4月20号又重启了下,以为会在21号执行,结果今天21号过来看又没有执行,我发现我之前的理解不对,我仅仅是知道每个3天的凌晨零时零分一秒执行,但是具体那天我其实不是很清楚。

    Cron表达式的详细用法
    字段 允许值 允许的特殊字符 
    秒 0-59 , - * / 
    分 0-59 , - * / 
    小时 0-23 , - * / 
    日期 1-31 , - * ? / L W C 
    月份 1-12 或者 JAN-DEC , - * / 
    星期 1-7 或者 SUN-SAT , - * ? / L C # 
    年(可选) 留空, 1970-2099 , - * /

    例子:
    0/5 * * * * ? : 每5秒执行一次


    “*”字符被用来指定所有的值。如:"*"在分钟的字段域里表示“每分钟”。 
    “?”字符只在日期域和星期域中使用。它被用来指定“非明确的值”。当你需要通过在这两个域中的一个来指定一些东西的时候,它是有用的。看下面的例子你就会明白。 
    月份中的日期和星期中的日期这两个元素时互斥的一起应该通过设置一个问号来表明不想设置那个字段。


    “-”字符被用来指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点”。


    “,”字符被用来指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”。


    “/”字符用于指定增量。如:“0/15”在秒域意思是每分钟的0,15,30和45秒。“5/15”在分钟域表示每小时的5,20,35和50。符号“*”在“/”前面(如:*/10)等价于0在“/”前面(如:0/10)。记住一条本质:表达式的每个数值域都是一个有最大值和最小值的集合,如:秒域和分钟域的集合是0-59,日期域是1-31,月份域是1-12。字符“/”可以帮助你在每个字符域中取相应的数值。如:“7/6”在月份域的时候只有当7月的时候才会触发,并不是表示每个6月。


    L是‘last’的省略写法可以表示day-of-month和day-of-week域,但在两个字段中的意思不同,例如day-of-month域中表示一个月的最后一天。如果在day-of-week域表示‘7’或者‘SAT’,如果在day-of-week域中前面加上数字,它表示一个月的最后几天,例如‘6L’就表示一个月的最后一个星期五。


    字符“W”只允许日期域出现。这个字符用于指定日期的最近工作日。例如:如果你在日期域中写 “15W”,表示:这个月15号最近的工作日。所以,如果15号是周六,则任务会在14号触发。如果15好是周日,则任务会在周一也就是16号触发。如果是在日期域填写“1W”即使1号是周六,那么任务也只会在下周一,也就是3号触发,“W”字符指定的最近工作日是不能够跨月份的。字符“W”只能配合一个单独的数值使用,不能够是一个数字段,如:1-15W是错误的。


    “L”和“W”可以在日期域中联合使用,LW表示这个月最后一周的工作日。


    字符“#”只允许在星期域中出现。这个字符用于指定本月的某某天。例如:“6#3”表示本月第三周的星期五(6表示星期五,3表示第三周)。“2#1”表示本月第一周的星期一。“4#5”表示第五周的星期三。


    字符“C”允许在日期域和星期域出现。这个字符依靠一个指定的“日历”。也就是说这个表达式的值依赖于相关的“日历”的计算结果,如果没有“日历”关联,则等价于所有包含的“日历”。如:日期域是“5C”表示关联“日历”中第一天,或者这个月开始的第一天的后5天。星期域是“1C”表示关联“日历”中第一天,或者星期的第一天的后1天,也就是周日的后一天(周一)。


    表达式举例
    "0 0 12 * * ?" 每天中午12点触发
    "0 15 10 ? * *" 每天上午10:15触发
    "0 15 10 * * ?" 每天上午10:15触发
    "0 15 10 * * ? *" 每天上午10:15触发
    "0 15 10 * * ? 2005" 2005年的每天上午10:15触发
    "0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
    "0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
    "0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
    "0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
    "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
    "0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
    "0 15 10 15 * ?" 每月15日上午10:15触发
    "0 15 10 L * ?" 每月最后一日的上午10:15触发
    "0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 
    "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
    "0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发



    通过上面的发现1 0 0 */3 * ?  

    如果4月1号执行,类似推理,4号,7号,10号,13号,16号,19号,22号,25号,28号 ,

    因为月的位置为* 表示每月,那么下月开始就是5月1号。


    如果5月1号执行,类似推理,4号,7号,10号,13号,16号,19号,22号,25号,28号,31号,

    因为月的位置为* 表示每月,那么下月开始就是6月1号。


    问题说到这里应该很明确了,之前的那个理解错误,应该是解决了。


    下面我们试试,通过编写java代码修改系统时间,每次到那个临界点来看看执行效果

    如下java代码执行:

    new Timer().schedule(new TimerTask() {
    			
    			@Override
    			public void run() {
    				try {
    					Runtime.getRuntime().exec("cmd /c time 23:59:50");//Windows 系统
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    				System.out.println("====="+simpleDateFormatt.format(new Date()));
    			}
    		}, 50, 60000);


    如果我想一直间隔3天的这种怎么实现了,刚刚那样的在5月31号执行,下次应该是6月3号而不是应该6月1号。


    展开全文
  • Sping AOP编程

    2019-03-18 01:05:39
    NULL 博文链接:https://gz383.iteye.com/blog/591084
  • Sping2.5注入

    2019-07-29 01:46:08
    NULL 博文链接:https://304476180.iteye.com/blog/833839
  • axis2 sping

    2019-03-20 03:36:48
    NULL 博文链接:https://qinchaoyong.iteye.com/blog/797843
  • sping代码优化建议

    2017-10-11 15:29:40
    这里提两点我项目中真正用到的建议,后面会陆续把其他的分享出来。1、controller返回数据大体格式在BaseController统一定义例如返回给前端的格式是{ "data":{}, code:0 }那么我们可以统一在BaseController...

    这里提两点我项目中真正用到的建议,后面会陆续把其他的分享出来。

    1、controller返回数据大体格式在BaseController统一定义

    例如返回给前端的格式是

    {
    "data":{},
    code:0
    }

    那么我们可以统一在BaseController中定义一个方法

    public final Object data(Onject object){
        JSONObject json = new JSONObject();
        json.put("code",0);
        json.put("data",object);
        return json;
    }

    每个Controller继承这个BaseController就可以了,在相应需要返回数据的地方return data(responseData)就行了。

    2、统一处理异常信息

    springmvc有提供注解@ExceptionHandler,当请求处理过程中抛出Exception异常的时候,将会委托该方法处理,我们在这个异常中处理日志记录和数据返回前端等工作。

    @ExceptionHandler(value = {Exception.class})  
    public final Object error(Exception e){
        logger.error("请求处理异常"+e.getMessage,e);
        JSONObject json = new JSONObject();
        json.put("code",-1);
        json.put("data","系统异常");
        return json;
    }
    当然这里还可以根据不同的异常信息,进行不同的处理。比如对于数据库的异常,我们可以向项目开发者发出警告信息,方便及时处理。对于不同的异常,可以返回不同的提示语,也方便开发自己知道大概的问题等。
    展开全文
  • Sping Web Bean Scope

    2019-06-30 22:40:37
    spring中bean的scope设置为request、session,然后注入到其他bean中使用 不同作用域(scope)的Spring Bean之间的依赖关系的动态代理注入 【Spring学习19】作用域:使用代理 spring-web-scope-samples ...
  • Sping 常见问题汇总

    2018-12-12 14:48:00
    1. 一般问题 3 1.1. 不同版本的 Spring Framework 有哪些主要功能? 3 1.2. 什么是 Spring Framework? 3 1.3. 列举 Spring Framework 的优点。 3 ...1.4. Spring Framework 有哪些不同的功能?...
  • Sping 的 BeanFactory 容器

    2016-09-29 15:30:34
    这是一个最简单的容器,它主要的功能是为依赖注入 (DI) 提供支持,这个容器接口在 org.springframework.beans.factory.BeanFactor 中被定义。 BeanFactory
  • Sping Boot全家桶

    2019-08-20 11:29:37
    (1)SpringBoot+Sharding-JDBC分库分表实战(16课时); (2)Spring Boot Shiro实战(22课时); (3)Spring Boot 2.0之Spring Data和JPA(21课时); (4)入门到精通:SpringBoot2和SpringSecurity5视频教程...
  • Sping IOC

    2019-03-05 16:45:42
    Sping IOCIoC是什么IoC能做什么IoC和DI IoC是什么 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象...
  • sping mvc

    千次阅读 2014-03-04 23:15:39
    Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门  资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf SpringMVC核心配置文件示例.rar ...二、spring mv
  • Sping基础

    2017-05-10 17:58:56
    1.Sping概述  Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EEDevelopment and Design中阐述的部分理念和原型衍生而来。它是为了解决...
  • Sping学习

    2017-09-16 00:27:49
    最近开始学习spring,博客记录学习之路。 1 通过idea创建了一个maven工程,在maven的pom文件中加入了spring支持的依赖包,pom文件代码如下: xml version="1.0" encoding="UTF-8"?> xmlns=...
  • sping简介

    2016-10-13 15:32:15
    Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。 在这篇由三部分组成的 ...
  • sping boot

    2018-07-14 15:38:57
    Spring Boot参考指南快速创建一个Sping boot项目Maven仓库依赖
  • sping 注解

    2019-05-28 19:45:28
    一、概念 作用: ——不是程序本身,可以对程序作出解释。(这一点和注释没什么区别) ——可以被其它程序(比如编译器)读取,这是区别于注释的最重要的一点。...——"@注释名" ,还可以添加一些参数,例如@...
  • Sping入门

    2018-12-04 14:32:58
    因为没有集合包,只能用的各个散的jar包 使用spring,没有new对象,我们把创建对象的任务交给spring框架。 package com.java.service; import com.java.byeservice.ByeBye;... privat...
  • Sping框架

    2018-12-11 19:06:09
    Sping在解决什么问题 程序自检的耦合(依赖)--必须依赖mysql的jar包 DriverManager.registerDriver(new com.mysql.jdbc.Driver); 三层架构中的解耦过程--对象的创建方式  1.强依赖关系 --通过new生成对象 ...

空空如也

1 2 3 4 5 ... 20
收藏数 4,447
精华内容 1,778
关键字:

sping