Mar 30
JAVA 代理实现
代理的实现分动态代理和静态代理,静态代理的实现是对已经生成了的JAVA类进行封装。
动态代理则是在运行时生成了相关代理类,在JAVA中生成动态代理一般有两种方式。

JDK自带实现方法
JDK实现代理生成,是用类 java.lang.reflect.Proxy, 实现方式如下

Eg:

Mar 28
Spring中autowire属性
default-autowire="x"
x有5个选择:byName,byType,constructor和autodetect,no

一、spring 自动装配 default-autowire="byName"

Service.java

public class Service
{
    Source source;

    public void setSource(Source source)
    {
        this.source = source;
    }
}
Mar 28
首先我们看下什么是属性编辑器,到底它有什么作用呢?
* 自定义属性编辑器,spring配置文件中的字符串转换成相应的对象进行注入
spring已经有内置的属性编辑器,我们可以根据需求自己定义属性编辑器

* 如何定义属性编辑器?
  * 继承PropertyEditorSupport类,覆写setAsText()方法(注意要将处理完成的对象通过PropertyEditorSupport的setValue设置回去)
*向IoC容器中注册自定义的属性编辑器(两种方式:1 在配置文件中注册 2 在程序中注册)
接下来我们就看看一个关于日期的属性编辑器的部署过程:
首先定义一个测试类:

比如:
有一个类里面有一个Date属性
package tk.hecks.property;

import java.util.Date;

public class User {
  private String username;
  private Date birthday;
  public String getUsername() {
    return username;
  }
  public void setUsername(String username) {
    this.username = username;
  }
  public Date getBirthday() {
    return birthday;
  }
  public void setBirthday(Date birthday) {
    this.birthday = birthday;
  }

}
Mar 28
Failed to convert property value of type [$Proxy13
Failed to convert property value of type [$Proxy13] to required type

PropertyAccessException 1: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy13] to required type [tk.hecks.dao.AuthorDaoImp] for property 'authorDaoImp'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy13] to required type [tk.hecks.dao.AuthorDaoImp] for property 'authorDaoImp': no matching editors or conversion strategy found  
Caused by:  
org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessException details (1) are:  
PropertyAccessException 1:  
org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy13] to required type [tk.hecks.dao.AuthorDaoImp] for property 'authorDaoImp'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy13] to required type [tk.hecks.dao.AuthorDaoImp] for property 'authorDaoImp': no matching editors or conversion strategy found  
Caused by:  
java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy13] to required type [tk.hecks.dao.AuthorDaoImp] for property 'authorDaoImp': no matching editors or conversion strategy found  
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:231)  
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:138)  
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:815)
Mar 24
    一直在用Servlet却从来没有深入去了解,有一天同事问在web.xml文件中 context-param 与 init-param 有啥区别?大家都知道在
web.xml里面可以定义两种参数:
1、application范围内的参数,存放在servletcontext中,在web.xml中配置如下:
<context-param>
           <param-name>context/param</param-name>
           <param-value>avalible during application</param-value>
  </context-param>

2、servlet范围内的参数,只能在servlet的init()方法中取得,在web.xml中配置如下:
<servlet>
    <servlet-name>MainServlet</servlet-name>
    <servlet-class>tk.hecks.controller.MainServlet</servlet-class>
    <init-param>
       <param-name>param1</param-name>
       <param-value>avalible in servlet init()</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
</servlet>
Mar 24
      Servlet的生命周期其实分为三个阶段:

  1、初始化阶段  调用init()方法

  2、响应客户请求阶段  调用service()方法

  3、终止阶段  调用destroy()方法

Servlet初始化阶段:

  在下列时刻Servlet容器装载Servlet:

    1、Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的<Servlet></Servlet>之间添加如下代码:

<loadon-startup>1</loadon-startup>

    2、在Servlet容器启动后,客户首次向Servlet发送请求

    3、Servlet类文件被更新后,重新装载Servlet

  Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。
Mar 21
     其实首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关。即不会因为 filter 写在 listener 的前面而会先加载 filter。最终得出的结论是:listener -> filter -> servlet

        同时还存在着这样一种配置节:context-param,它用于向 ServletContext 提供键值对,即应用程序上下文信息。我们的 listener, filter 等在初始化时会用到这些上下文中的信息,那么 context-param 配置节是不是应该写在 listener 配置节前呢?实际上 context-param 配置节可写在任意位置,因此真 正的加载顺序为:context-param -> listener -> filter -> servlet

        对于某类配置节而言,与它们出现的顺序是有关的。以 filter 为例,web.xml 中当然可以定义多个 filter,与 filter 相关的一个配置节是 filter-mapping,这里一定要注意,对于拥有相同 filter-name 的 filter 和 filter-mapping 配置节而言,filter-mapping 必须出现在 filter 之后,否则当解析到 filter-mapping 时,它所对应的 filter-name 还未定义。web 容器启动时初始化每个 filter 时,是按照 filter 配置节出现的顺序来初始化的,当请求资源匹配多个 filter-mapping 时,filter 拦截资源是按照 filter-mapping 配置节出现的顺序来依次调用 doFilter() 方法的。
Jan 29
    开发经理是个工作压力比较大的职位。作为“中间人”,你需要在管理层、客户、销售、开发人员等多种角色之间周旋。没人会注意你的工作做得有多好:一切都运转顺利,工作进展得波澜不惊,所有人都各得所需。但如果事情失败了,不论什么原因,可都是你的错。

要成为一名成功的开发经理,秘诀就是管理好期望,第一步就是确保所有人都理解你的职能。你和你工作相关的人,都要对开发经理的期许达成一致。

我看过很多开发经理的招聘信息,但我都不太赞同上面的描述。有一个要求深入了解大量编程语言和环境,还有一个要求66%的时间进行编程(为什么不直接写三分之二?),还有一些要求有PMO认证,类似的要求不一而足。我承认开发经理的职能是有点儿模糊不清,但像这样的招聘信息让我觉得发布这些职位的公司并没有真正思考过开发经理的职能。这种情况对公司和受雇的人来说都后患无穷。

作为开发经理,你要承担很多责任,但重要的是发布产品。你的目标是采取所有必要的措施,确保能把产品交付给客户或市场。要做到这一点,你需要确保开发团队能尽可能高效地工作,而且要确保他们有明确的目标(无论是短期的还是长期的),扫除阻碍他们工作的一切障碍。从最初的项目范围,到在客户网站上部署产品,每一步都是你的职责。你可以(而且应该)尽量把事情委派给下属去做,但你要检查事情是否和你预期的一样,如果不是可要自己投入。

项目范围界定

作为开发经理,你需要知道如何界定项目的范围。根据你所在组织的情况以及你和外部群组的协作方式,这可能是你工作的重要组成部分。如果你经常承担、负责第三方的项目,那你应该知道如何对RFP(需求建议书)作出回应,包括交付物、时间表和预算等。即便你只做内部项目,没有正式的文档系统,你也应该养成为每个项目写一份项目范围说明书的习惯。另外,如果你从事的是敏捷开发,这些文档就要随着项目的进展持续维护和更新。

“总置顶”项目

这是项目范围界定的一部分,但它应该单独说明一下。我听大家谈论过“总置顶”项目,这类项目不需要预算和时间表。这可是错误的!如果弄不清楚成本和交付物对这些“总置顶”项目有怎样的依赖,那可能会扼杀你的团队,因为这些“总置顶”项目会拖延进度、消耗其他工作需要的资源。你承担的每个项目至少都要有一个内部成本和一个交付物。你要和其他利益相关方一起协商你所承担的一切。
Dec 10
         二十多岁的年轻人平均18个月就会换一份工作。在三十多岁的时候——至少是那些继续努力做好自己的事业的人——也同样会频繁的更换工作,尽管比在二十多岁的时候更换的频率要慢一些。所以,如果你认为跳槽是不好的,你要改变一下你的想法了。跳槽者不是半途而废的人,事实上,他们会成为很好的同事和很好的员工,而且我相信他们都很满意他们的工作生活。
  
原因如下:
  
  1.跳槽者从职业生涯中收获到更多才智
  
  几乎所有的工作,早期的学习曲线都是明显上升的。过后,它会慢慢回落。因此,在做了两年同样的工作之后,你通常会觉得已经没有什么需要学习的了。这让我非常想知道,是什么能让那些做了二十几年同样工作的人保持大脑的活力。这也让我确定了,那些跳槽的人会了解更多东西。
  
  如果你经常换工作,那么你就一直需要去学习很多东西——你的学习曲线会一直保持上升势头。尤其是办公室技能以及具体的职业知识。这也同样适用于你的情商。你越是在阶层管理严格的公司里处理办公室的事宜,你就越会了解人们的想法,并且可以在工作中让人们觉得舒适。这就是一项很棒的办公室技能。
  
  2.跳槽者会有更稳定的事业
  
  很多公司没有给它的员工提供稳定的职位。那些会认为公司就该提供稳定的工作的人们,应该都是些年纪很大而且完全不与社会和其他人接触的人。公司会有裁员,雇佣合同工人和临时工等措施——实际上,这仅仅开始于上一代。在职业生涯中是否能得到稳定,是取决于你自己的。如果你还在指望某些公司可以提供稳定的工作给你,你要知道这是非常可怕的。但如果你有自信,相信自己的能力以及你对于事业的理解,那就不会有什么问题。你可以创造稳定的职业——只要做你自己就可以了。
Tags:
Aug 11
         wampserver集成在安装完后默认是没有开启伪静态的,所以有时把某些网站源码放进去时如果源码里包含.htaccess文件的话,可能使用者出现500错误,这一般是因为不支持伪静态造成的,解决这个问题也是很简单的,就几步。那么我来分享一下wamp集成环境开启rewrite伪静态的方法:

第一步:打开wamp安装目录里的bin文件夹,找到Apache安装目录下的conf目录中的httpd.conf这个文件(比如我的是:F:\wamp\bin\apache\Apache2.2.11\conf),搜索找到,“LoadModule rewrite_module modules/mod_rewrite.so”,找到这一行,去掉前面的“#”;
第二步:找到“AllowOverride None”改为“AllowOverride All”,好像有两个位置,都改了算了…;
第三步:重启apache
第四步:现在,就可以使用.htaccess文件实现伪静态等功能了
至此就完成了wamp集成环境开启rewrite伪静态!
分页: 6/47 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]