
本场 Chat 将使用 Spring Boot、Mybatis 搭建一个简易的 Java 服务,是一个不需要修改配置文件、不重启服务、动态切换数据源的项目,适合需要需要多数据源(经常变化的数据源,数据源 3 个以上等)的 Java 开发人员查阅。
该 Chat 偏向于实现动态加载数据源方式,能搭建一个能正常运行的动态多数据源的 Java 项目,同时会提供文章内所有的源码,以供读者快速搭建环境。故大部分篇幅用于描述环境搭建及应用,不会对各个技术内部进行深入。
以下是本 Chat 的核心内容:
默认数据源搭建;
创建 Map 保存数据源;
新数据源导入;
数据源持久化优化 。
网页链接
maven 33 3貌似还不支持jdk8,我也遇到了这问题,最后换了7好了官网貌似说支持7及以上的版本,但是确实不行。不过java多版本可以同时存在,你不想删除8可以重新再装个7或6,alias命令动态切换java版本就可以了。
具体 *** 作:
1、打开终端 cd到根路径, cd -
2、输入vi bash_profile打开bash配置文件
3、再配置文件bash配置文件下新增JAVA_HOME的路径
export JAVA_6_HOME=/Library/Java/JavaVirtualMachines/160jdk/Contents/Home
export JAVA_7_HOME=/Library/Java/JavaVirtualMachines/jdk170_79jdk/Contents/Home
export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk180_60jdk/Contents/Home
export JAVA_HOME=$JAVA_7_HOME
4、创建alias命令动态切换JAVA_HOME的配置
alias jdk8='export JAVA_HOME=$JAVA_8_HOME'
alias jdk7='export JAVA_HOME=$JAVA_7_HOME'
alias jdk6='export JAVA_HOME=$JAVA_6_HOME'
5、终端输入source bash_profile 保存配置文件
配置的默认是7,想切换8直接终端输入jdk8就切换成8了。
转载我首先想到在spring但是,我很快发现一个问题:当多用户同时并发访问数据库的时候会出现资源争用的问题。这都是“单例模式”惹的祸。众所周知,我们在使用spring通过以上的分析,解决多数据源访问问题的关键,就集中在sessionFactory(一) 采用Decorator设计模式
要解决这个问题,我的思路锁定在了这个dataSource什么是“
(二) 设计MultiDataSource类
现在回到我们的问题,我们需要对dataSource
对比原Decorator<span times="" span=""
private DataSource dataSource = null;
public MultiDataSource(DataSource dataSource){
thisdataSource = dataSource;
}
/ (non-Javadoc)
@see javaxsqlDataSource#getConnection()
/
public Connection getConnection() throws SQLException {
return getDataSource()getConnection();
}
//其它DataSource接口应当实现的方法
public DataSource getDataSource(){
return thisdataSource;
}
}
public void setDataSource(DataSource dataSource) {
thisdataSource = dataSource;
}
}
客户在发出请求的时候,将dataSourceName放到request中,然后把request中的数据源名通过调用new MultiDataSource(dataSource)时可以告诉客户需要的数据源,就可以实现动态切换数据源了。但细心的朋友会发现这在单例的情况下就是问题的,因为在系统中只有一个对象,它的实例变量也只有一个,就如同一个静态变量一般。正因为如此,(三) 单例模式下的MultiDataSource
在单例模式下,由于我们在每次调用MultiDataSource
logdebug("dataSourceName:"+dataSourceName);
try{
if(dataSourceName==null||dataSourceNameequals("")){
return thisdataSource;
}
return (DataSource)thisapplicationContextgetBean(dataSourceName);
}catch(NoSuchBeanDefinitionException ex){
throw new DaoException("There is not the dataSource
}
}
值得一提的是,我需要的数据源已经都在spring就是其对应的<span courier="" span="" new;bean id="dataSource1"
class="orgapachecommonsdbcpBasicDataSource">
<property name="driverClassName">
<value>oraclejdbcdriverOracleDrivervalue>
property>
bean>
<bean id="dataSource2"
class="orgapachecommonsdbcpBasicDataSource">
<property name="driverClassName">
<value>oraclejdbcdriverOracleDrivervalue>
property>
bean>
为了得到spring,并且实现方法:
java 代码
private ApplicationContext applicationContext = null;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
thisapplicationContext = applicationContext;
}
如此这样,我就可以通过得到了。
(四) 通过线程传递dataSourceName
查看以上设计,MultiDataSource
<span times="" span="" roman;class SpObserver {
private static ThreadLocal local = new ThreadLocal();
public static void putSp(String sp) {
localset(sp);
}
public static String getSp() {
return (String)localget();
}
}
做一个filter,将request中的dataSourceName对象。
String sp = SpObservergetSp();
return getDataSource(sp);
}
完整的MultiDataSource(五) 动态添加数据源
通过以上方案,我们解决了动态分配数据源的问题,但你可能提出疑问:方案中的数据源都是配置在spring中(见附件)。不通过配置文件直接加载对象,在的源码中也有,感兴趣的朋友可以自己研究。
(六) 在spring中配置
在完成了所有这些设计以后,我最后再唠叨一句。我们应当在spring<span times="" span="" roman;bean id="dynamicLoadBean" class="comhtxxservicedaoDynamicLoadBean">bean>
<bean id="dataSource" class="comhtxxservicedaoMultiDataSource">
<property name="dataSource">
<ref bean="dataSource1" />
property>
bean>
<bean id="sessionFactory" class="orgspringframeworkormhibernate3LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
property>
bean>
其中dataSource以上方案与其它方案相比,它有哪些优势呢?
首先,这个方案完全是在spring其次,实现简单,易于维护。这个方案虽然我说了这么多东西,其实都是分析,真正需要我们写的代码就只有MultiDataSource最后,这个方案可以使单数据源与多数据源兼容。这个方案完全不影响BUS相关博客:再析在spring框架中解决多数据源的问题
examplerar
描述: 源码及示例
下载
文件名: examplerar
文件大小: 32 KB
下载过的: 文件被下载或查看 521 次
再析在spring框架中解决多数据源的问题
关键字: Spring Hibernate Decorator 设计模式
如何在spring总结多数据源的问题,其实它需要分为以下三种情况:各个数据源的数据结构不同、各个数据源的数据结构相同、各个数据源的数据结构部分相同又有部分不同。对于第二种情况,各个数据源的数据结构相同,我们使用一个sessionFactory对于各个数据源的数据结构不同的情况,使用一个sessionFactory与MultiDataSource
在该方案中,SessionFactory接口,Decorator就是MultiSessionFactory,SessionFactory1和SessionFactory2往往是spring的。细心的朋友可能会注意,实际上并不是SessionFactory的时候其实并不是真正地得到了它,而是得到了一个SessionFactory重写了getObject()。在整个这个方案中,我们需要实现的只有MultiSessionFactory。MultiSessionFactory<span times="" span="" roman;class MultiSessionFactory implements SessionFactory, ApplicationContextAware {
private static final long serialVersionUID = 2064557324203496378L;
private static final Log log = LogFactorygetLog(MultiSessionFactoryclass);
private ApplicationContext applicationContext = null;
private SessionFactory sessionFactory = null;
public ApplicationContext getApplicationContext() {
return applicationContext;
}
public void setApplicationContext(ApplicationContext applicationContext) {
thisapplicationContext = applicationContext;
}
public SessionFactory getSessionFactory(String sessionFactoryName) {
logdebug("sessionFactoryName:"+sessionFactoryName);
try{
if(sessionFactoryName==null||sessionFactoryNameequals("")){
return sessionFactory;
}
return (SessionFactory)thisgetApplicationContext()getBean(sessionFactoryName);
}catch(NoSuchBeanDefinitionException ex){
throw new DaoException("There is not the sessionFactory
}
}
public SessionFactory getSessionFactory() {
String sessionFactoryName = SpObservergetSp();
return getSessionFactory(sessionFactoryName);
}
public void setSessionFactory(SessionFactory sessionFactory) {
thissessionFactory = sessionFactory;
}
// SessionFactory接口需要实现的方法
}
MultiSessionFactory的完整代码见我提供的附件。<span times="" roman;="" new="" span="" newbean id="sessionFactory" class="comhtxxservicedaoMultiSessionFactory">
<property name="sessionFactory"><ref bean="hostSessionFactory"/>property>
>
SpServer的写法与《如何在另外,在spring也许有些朋友对以上方案还不满意,因为在执行数据访问前毕竟还要多做一步指定sessionFactory另外,在这个方案中的核心是运用Decorator前面我已经给出了第一种和第二种情况的解决方案:各个数据源的数据结构不同的情况用MultiSessionFactory
examplerar
描述: 示例文件
下载
文件名: examplerar
文件大小: 16 KB
下载过的: 文件被下载或查看 180 次
建议到原作者博客查看原文,那里有很好的回复
var value;
eval("value=openerdocumentforms[0]" + name + "value");
最后取value就是那个值了。
JAVA语言的八大优点是什么。小编整理以下的回答。希望可以解决您的困惑。
JAVA语言的优点一、使用广泛
Java是目前使用最为广泛的网络编程语言之一。java课程培训机构发现它具有简单,面向对象,稳定,与平台无关,解释型,多线程,动态等特点。
JAVA语言的优点二、简单
Java语言简单是指这门语言既易学有好用。
如果你学习过C++语言,你会感觉Java很眼熟,因为Java中许多基本语句的语法和C++一样,像常用的循环语句,控制语句等和C++几乎一样,但不要误解为Java是C++的增强版,Java和C++是两种完全不同的语言,他们各有各的优势,将会长期并存下去,Java语言和C++语言已成为软件开发者应当掌握的语言。
如果从语言的简单性方面看,Java要比C++简单,C++中许多容易混淆的概念,或者被Java弃之不用了,或者以一种更清楚更容易理解的方式实现,例如,Java不再有指针的概念。
JAVA语言的优点三、面向对象
基于对象的编程更符合人的思维模式,使人们更容易编写程序。在实际生活中,我们每时每刻都与对象在打交道。我们用的钢笔,骑的自行车,乘的公共汽车等。
另外,还有几个重要的功能,加速功能,减速功能,刹车,转弯功能等。我们也可以把这些功能称作是他们具有的方法,而物理量是它们的状态描述。仅仅用物理量或功能不能很好的描述它们。
在现实生活中,我们用这些共有的属性和功能给出一个概念机动车类。一个具体的轿车就是机动车类的一个实例对象Java语言与其它面向对象语言一样,引入了类的概念,类是用来创建对象的模板,它包含被创建的对象的状态描述和方法的定义。
JAVA语言的优点四、与平台无关
与平台无关是Java语言最大的优势。其它语言编写的程序面临的一个主要问题是 *** 作系统的变化,处理器升级以及核心系统资源的变化,都可能导致程序出现错误或无法运行。
Java的虚拟机成功地解决了这个问题,Java编写的程序可以在任何安装了Java虚拟机JVM的计算机上正确的运行,Sun公司实现了自己的目标“一次写成,处处运行”。
JAVA语言的优点五、解释型
我们知道C,C++等语言,都是只能对特定的CPU芯片进行编译,生成机器代码,该代码的运行就和特定的CUP有关。例如,在C语言中,我们都碰到过类似下面的问题int型变量的值是10,那么下面代码的输出结果是什么呢
如果上述语句的计算顺序是从左到右,结果是10,11。但是,有些机器会从右到左计算,那么结果就是11,11Java不像C++,它不针对特定的CPU芯片进行编译,而是把程序编译为称做字节码的一个“中间代码”。
字节码是很接近机器码的文件,可以在提供了Java虚拟机JVM的任何系统上被解释执行。Java被设计成为解释执行的程序,即翻译一句,执行一句,不产生整个的机器代码程序。翻译过程如果不出现错误,就一直进行到完毕,否则将在错误处停止执行。
同一个程序,如果是解释执行的,那么它的运行速度通常比编译为可执行的机器代码的运行速度慢一些。但是,对Java来说,二者的差别不太大,Java的字节码经过仔细设计,很容易便能使用JIT即时编译方式编译技术将字节码直接转化成高性能的本地机器码,Sun公司在Java2发行版中提供了这样一个字节码编译器——JIT(JustInTime),它是Java虚拟机的一部分。
Java运行系统在提供JIT的同时仍具有平台独立性,因而“高效且跨平台”对Java来说不再矛盾。如果把Java的程序比做“汉语”的话,字节码就相当于“世界语”,世界语不和具体的“国家”关,只要这个“国家”提供了“翻译”,就可以再快速地把世界语翻译成本地语言。
JAVA语言的优点六、多线程
多线程允许同时完成多个任务,实际上多线程使人产生多个任务在同时执行的错觉。
因为,目前的计算机的处理器在同一时刻只能执行一个线程,但处理器可以在不同的线程之间快速地切换,由于处理器速度非常快,远远超过了人接收信息的速度,所以给人的感觉好象多个任务在同时执行。C++没有内置的多线程机制,因此必须调用 *** 作系统的多线程功能来进行多线程程序的设计。
JAVA语言的优点七、安全
当你准备从网络上下载一个程序时,你最大的担心是程序中含有恶意的代码,比如试图读取或删除本地机上的一些重要文件,甚至该程序是一个病毒程序等。
当你使用支持Java的浏览器时,你可以放心地运行Java的小应用程序JavaApplet,不必担心病毒的感染和恶意的企图,Java小应用程序将限制在Java运行环境中,不允许它访问计算机的其它部分。
JAVA语言的优点八、动态
Java程序的基本组成单元就是类,有些类是自己编写的,有一些是从类库中引入的,而类又是运行时动态装载的,这就使得Java可以在分布环境中动态地维护程序及类库,而不像C++那样,每当其类库升级之后,相应的程序都必须重新修改,编译。
Java学习之路:不走弯路,就是捷径(1)作者:_来源:中国Java技术网_原文地址_2006-3-140.引言在ChinaITLAB导师制辅导中,笔者发现问得最多的问题莫过于"如何学习编程?Java该如何学习?"
到时候再有人问起类似的问题,我可以告诉他(她),请你去看看《Java学习之路》
拜读过台湾蔡学镛先生的《Java夜未眠》,有些文章如《Java学习之道》等让我们确实有共鸣,本文题目也由此而来
软件开发之路是充满荆棘与挑战之路,也是充满希望之路
Java学习也是如此,没有捷径可走
梦想像《天龙八部》中虚竹一样被无崖子醍醐灌顶而轻松获得一甲子功力,是很不现实的
每天仰天大叫"天神啊,请赐给我一本葵花宝典吧",殊不知即使你获得了葵花宝典,除了受自宫其身之苦外,你也不一定成得了"东方不败",倒是成"西方失败"的几率高一点
"不走弯路,就是捷径",佛经说的不无道理
1.如何学习程序设计?Java是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于Java,对C++等其他程序设计语言也一样管用
有编程高手认为,Java也好C也好没什么分别,拿来就用
为什么他们能达到如此境界?我想是因为编程语言之间有共通之处,领会了编程的精髓,自然能够做到一通百通
如何学习程序设计理所当然也有许多共通的地方
1
1培养兴趣兴趣是能够让你坚持下去的动力
如果只是把写程序作为谋生的手段的话,你会活的很累,也太对不起自己了
多关心一些行业趣事,多想想盖茨
你认为,这样有味道吗?有空多到一些程序员论坛转转,你会发现,他们其实很乐观幽默,时不时会冒出智慧的火花
1
2慎选程序设计语言男怕入错行,女怕嫁错郎
初学者选择程序设计语言需要谨慎对待
软件开发不仅仅是掌握一门编程语言了事,它还需要其他很多方面的背景知识
软件开发也不仅仅局限于某几个领域,而是已经渗透到了各行各业几乎每一个角落
如果你对硬件比较感兴趣,你可以学习C语言/汇编语言,进入硬件开发领域
如果你对电信的行业知识及网络比较熟悉,你可以在C/C++等之上多花时间,以期进入电信软件开发领域
如果你对 *** 作系统比较熟悉,你可以学习C/Linux等等,为Linux内核开发/驱动程序开发/嵌入式开发打基础
如果你想介入到应用范围最广泛的应用软件开发(包括电子商务电子政务系统)的话,你可以选择J2EE或
NET,甚至LAMP组合
每个领域要求的背景知识不一样
做应用软件需要对数据库等很熟悉
总之,你需要根据自己的特点来选择合适你的编程语言
1
3要脚踏实地,快餐式的学习不可取先分享一个故事
有一个小朋友,他很喜欢研究生物学,很想知道那些蝴蝶如何从蛹壳里出来,变成蝴蝶便会飞
有一次,他走到草原上面看见一个蛹,便取了回家,然后看着,过了几天以后,这个蛹出了一条裂痕,看见里面的蝴蝶开始挣扎,想抓破蛹壳飞出来
这个过程达数小时之久,蝴蝶在蛹里面很辛苦地拼命挣扎,怎么也没法子走出来
这个小孩看着看着不忍心,就想不如让我帮帮它吧,便随手拿起剪刀在蛹上剪开,使蝴蝶破蛹而出
但蝴蝶出来以后,因为翅膀不够力,变得很臃肿,飞不起来
这个故事给我们的启示是:欲速则不达
浮躁是现代人最普遍的心态,能怪谁?也许是贫穷落后了这么多年的缘故,就像当年的大跃进一样,都想大步跨入共产主义社会
现在的软件公司、客户、政府、学校、培训机构等等到处弥漫着浮躁之气
就拿笔者比较熟悉的深圳IT培训行业来说吧,居然有的打广告宣称"参加培训,100%就业",居然报名的学生不少,简直是藐视天下程序员
社会环境如是,我们不能改变,只能改变自己,闹市中的安宁,弥足珍贵
许多初学者C++/Java没开始学,立马使用VC/JBuilder,会使用VC/JBuilder开发一个HelloWorld程序,就忙不迭的向世界宣告,"我会软件开发了",简历上也大言不惭地写上"精通VC/Java"
结果到软件公司面试时要么被三两下打发走了,要么被驳的体无完肤,无地自容
到处碰壁之后才知道捧起《C++编程思想》《Java编程思想》仔细钻研,早知如此何必当初呀
"你现在讲究简单方便,你以后的路就长了",好象也是佛经中的劝戒
1
4多实践,快实践彭端淑的《为学一首示子侄》中有穷和尚与富和尚的故事
从前,四川边境有两个和尚,一个贫穷,一个有钱
一天,穷和尚对富和尚说:"我打算去南海朝圣,你看怎么样?"富和尚说:"这里离南海有几千里远,你靠什么去呢?"穷和尚说:"我只要一个水钵,一个饭碗就够了
"富和尚为难地说:"几年前我就打算买条船去南海,可至今没去成,你还是别去吧!"一年以后,富和尚还在为租赁船只筹钱,穷和尚却已经从南海朝圣回来了
这个故事可解读为:任何事情,一旦考虑好了,就要马上上路,不要等到准备周全之后,再去干事情
假如事情准备考虑周全了再上路的话,别人恐怕捷足先登了
软件开发是一门工程学科,注重的就是实践,"君子动口不动手"对软件开发人员来讲根本就是错误的,他们提倡"动手至上",但别害怕,他们大多温文尔雅,没有暴力倾向,虽然有时候蓬头垢面的一副"比尔盖茨"样
有前辈高人认为,学习编程的秘诀是:编程、编程、再编程,笔者深表赞同
不仅要多实践,而且要快实践
我们在看书的时候,不要等到你完全理解了才动手敲代码,而是应该在看书的同时敲代码,程序运行的各种情况可以让你更快更牢固的掌握知识点
1
5多参考程序代码程序代码是软件开发最重要的成果之一,其中渗透了程序员的思想与灵魂
许多人被《仙剑奇侠传》中凄美的爱情故事感动,悲剧的结局更有一种缺憾美
为什么要以悲剧结尾?据说是因为写《仙剑奇侠传》的程序员失恋而安排了这样的结局,他把自己的感觉融入到游戏中,却让众多的仙剑迷扼腕叹息
多多参考代码例子,对Java而言有参考文献[4
3],有API类的源代码(JDK安装目录下的src
zip文件),也可以研究一些开源的软件或框架
1
6加强英文阅读能力对学习编程来说,不要求英语,但不能一点不会,
最起码像JavaAPI文档(参考文献[4
4])这些东西还是要能看懂的,连猜带懵都可以;旁边再开启一个"金山词霸"
看多了就会越来越熟练
在学Java的同时学习英文,一箭双雕多好
另外好多软件需要到英文网站下载,你要能够找到它们,这些是最基本的要求
英语好对你学习有很大的帮助
口语好的话更有机会进入管理层,进而可以成为剥削程序员的"周扒皮"
1
7万不得已才请教别人笔者在ChinaITLab网校的在线辅导系统中解决学生问题时发现,大部分的问题学生稍做思考就可以解决
要知道独立思考的能力对你很重要
要知道程序员的时间是很宝贵的
1
8多读好书书中自有颜如玉
比尔盖茨是一个饱读群书的人
虽然没有读完大学,但九岁的时候比尔盖茨就已经读完了所有的百科全书,所以他精通天文、历史、地理等等各类学科,可以说比尔盖茨不仅是当今世界上金钱的首富,而且也可以称得上是知识的巨富
笔者在给学生上课的时候经常会给他们推荐书籍,到后来学生实在忍无可忍开始抱怨,"天呐,这么多书到什么时候才能看完了","学软件开发,感觉上了贼船"
(注:这一部分学生是刚学软件开发的)对于在Java开发领域的好书在笔者另外一篇文章中会专门点评
该文章可作为本文的姊妹篇
1
9使用合适的工具工欲善其事必先利其器
软件开发包含各种各样的活动,需求收集分析、建立用例模型、建立分析设计模型、编程实现、调试程序、自动化测试、持续集成等等,没有工具帮忙可以说是寸步难行
工具可以提高开发效率,使软件的质量更高BUG更少
组合称手的武器
到飞花摘叶皆可伤人的境界就很高了,无招胜有招,手中无剑心中有剑这样的境界几乎不可企及
在笔者另外一篇文章中会专门阐述如何选择合适的工具(该文章也可作为本文的姊妹篇)
2.软件开发学习路线两千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒进也不保守并非中庸之道,而是找寻学习软件开发的正确路线与规律
从软件开发人员的生涯规划来讲,我们可以大致分为三个阶段,软件工程师→软件设计师→架构设计师或项目管理师
不想当元帅的士兵不是好士兵,不想当架构设计师或项目管理师的程序员也不是好的程序员
我们应该努力往上走
让我们先整理一下开发应用软件需要学习的主要技术
A.基础理论知识,如 *** 作系统、编译原理、数据结构与算法、计算机原理等,它们并非不重要
如不想成为计算机科学家的话,可以采取"用到的时候再来学"的原则
B.一门编程语言,现在基本上都是面向对象的语言,Java/C++/C等等
如果做WEB开发的话还要学习HTML/JavaScript等等
C.一种方法学或者说思想,现在基本都是面向对象思想(OOA/OOD/设计模式)
由此而衍生的基于组件开发CBD/面向方面编程AOP等等
D.一种关系型数据库,ORACLE/SqlServer/DB2/MySQL等等E.一种提高生产率的IDE集成开发环境JBuilder/Eclipse/VS
NET等
F.一种UML建模工具,用ROSE/VISIO/钢笔进行建模
G.一种软件过程,RUP/XP/CMM等等,通过软件过程来组织软件开发的众多活动,使开发流程专业化规范化
当然还有其他的一些软件工程知识
H.项目管理、体系结构、框架知识
正确的路线应该是:B→C→E→F→G→H
还需要补充几点:1).对于A与C要补充的是,我们应该在实践中逐步领悟编程理论与编程思想
新技术虽然不断涌现,更新速度令人眼花燎乱雾里看花;但万变不离其宗,编程理论与编程思想的变化却很慢
掌握了编程理论与编程思想你就会有拨云见日之感
面向对象的思想在目前来讲是相当关键的,是强势技术之一,在上面需要多投入时间,给你的回报也会让你惊喜
2).对于数据库来说是独立学习的,这个时机就由你来决定吧
3).编程语言作为学习软件开发的主线,而其余的作为辅线
4).软件工程师着重于B、C、E、D;软件设计师着重于B、C、E、D、F;架构设计师着重于C、F、H
3.如何学习Java3
1Java学习路线3
1
1基础语法及Java原理基础语法和Java原理是地基,地基不牢靠,犹如沙地上建摩天大厦,是相当危险的
学习Java也是如此,必须要有扎实的基础,你才能在J2EE、J2ME领域游刃有余
参加SCJP(SUN公司认证的Java程序员)考试不失为一个好方法,原因之一是为了对得起你交的1200大洋考试费,你会更努力学习,原因之二是SCJP考试能够让你把基础打得很牢靠,它要求你跟JDK一样熟悉Java基础知识;但是你千万不要认为考过了SCJP就有多了不起,就能够获得软件公司的青睐,就能够获取高薪,这样的想法也是很危险的
获得"真正"的SCJP只能证明你的基础还过得去,但离实际开发还有很长的一段路要走
3
1
2OO思想的领悟掌握了基础语法和Java程序运行原理后,我们就可以用Java语言实现面向对象的思想了
面向对象,是一种方法学;是独立于语言之外的编程思想;是CBD基于组件开发的基础;属于强势技术之一
当以后因工作需要转到别的面向对象语言的时候,你会感到特别的熟悉亲切,学起来像喝凉水这么简单
使用面向对象的思想进行开发的基本过程是:●调查收集需求
●建立用例模型
●从用例模型中识别分析类及类与类之间的静态动态关系,从而建立分析模型
●细化分析模型到设计模型
●用具体的技术去实现
●测试、部署、总结
3
1
3基本API的学习进行软件开发的时候,并不是什么功能都需要我们去实现,也就是经典名言所说的"不需要重新发明轮子"
我们可以利用现成的类、组件、框架来搭建我们的应用,如SUN公司编写好了众多类实现一些底层功能,以及我们下载过来的JAR文件中包含的类,我们可以调用类中的方法来完成某些功能或继承它
那么这些类中究竟提供了哪些方法给我们使用?方法的参数个数及类型是?类的构造器需不需要参数?总不可能SUN公司的工程师打国际长途甚至飘洋过海来告诉你他编写的类该如何使用吧
他们只能提供文档给我们查看,JavaDOC文档(参考文献4
4)就是这样的文档,它可以说是程序员与程序员交流的文档
基本API指的是实现了一些底层功能的类,通用性较强的API,如字符串处理/输入输出等等
我们又把它成为类库
熟悉API的方法一是多查JavaDOC文档(参考文献4
4),二是使用JBuilder/Eclipse等IDE的代码提示功能
3
1
4特定API的学习Java介入的领域很广泛,不同的领域有不同的API,没有人熟悉所有的API,对一般人而言只是熟悉工作中要用到的API
如果你做界面开发,那么你需要学习Swing/AWT/SWT等API;如果你进行网络游戏开发,你需要深入了解网络API/多媒体API/2D3D等;如果你做WEB开发,就需要熟悉Servlet等API啦
总之,需要根据工作的需要或你的兴趣发展方向去选择学习特定的API
3
1
5开发工具的用法在学习基础语法与基本的面向对象概念时,从锻炼语言熟练程度的角度考虑,我们推荐使用的工具是Editplus/JCreator+JDK,这时候不要急于上手JBuilder/Eclipse等集成开发环境,以免过于关注IDE的强大功能而分散对Java技术本身的注意力
过了这一阶段你就可以开始熟悉IDE了
程序员日常工作包括很多活动,编辑、编译及构建、调试、单元测试、版本控制、维持模型与代码同步、文档的更新等等,几乎每一项活动都有专门的工具,如果独立使用这些工具的话,你将会很痛苦,你需要在堆满工具的任务栏上不断的切换,效率很低下,也很容易出错
在JBuilder、Eclipse等IDE中已经自动集成编辑器、编译器、调试器、单元测试工具JUnit、自动构建工具ANT、版本控制工具CVS、DOC文档生成与更新等等,甚至可以把UML建模工具也集成进去,又提供了丰富的向导帮助生成框架代码,让我们的开发变得更轻松
应该说IDE发展的趋势就是集成软件开发中要用到的几乎所有工具
从开发效率的角度考虑,使用IDE是必经之路,也是从一个学生到一个职业程序员转变的里程碑
Java开发使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等几种;而Eclipse、JBuilder占有的市场份额是最大的
JBuilder在近几年来一直是Java集成开发环境中的霸主,它是由备受程序员尊敬的Borland公司开发,在硝烟弥漫的JavaIDE大战中,以其快速的版本更新击败IBM的VisualAgeforJava等而成就一番伟业
IBM在VisualAgeforJava上已经无利可图之下,干脆将之贡献给开源社区,成为Eclipse的前身,真所谓"柳暗花明又一村"
浴火重生的Eclipse以其开放式的插件扩展机制、免费开源获得广大程序员(包括几乎所有的骨灰级程序员)的青睐,极具发展潜力
3
1
6学习软件工程对小型项目而言,你可能认为软件工程没太大的必要
随着项目的复杂性越来越高,软件工程的必要性才会体现出来
参见"软件开发学习路线"小节
3
2学习要点确立的学习路线之后,我们还需要总结一下Java的学习要点,这些要点在前文多多少少提到过,只是笔者觉得这些地方特别要注意才对它们进行汇总,不要嫌我婆婆妈妈啊
3
2
1勤查API文档当程序员编写好某些类,觉得很有成就感,想把它贡献给各位苦难的同行
这时候你要使用"Javadoc"工具(包含在JDK中)生成标准的JavaDOC文档,供同行使用
J2SE/J2EE/J2ME的DOC文档是程序员与程序员交流的工具,几乎人手一份,除了菜鸟之外
J2SEDOC文档官方下载地址:
对待DOC文档要像毛主席语录,早上起床念一遍,吃饭睡觉前念一遍
当需要某项功能的时候,你应该先查相应的DOC文档看看有没有现成的实现,有的话就不必劳神费心了直接用就可以了,找不到的时候才考虑自己实现
使用步骤一般如下:●找特定的包,包一般根据功能组织
●找需要使用类,类命名规范的话我们由类的名字可猜出一二
●选择构造器,大多数使用类的方式是创建对象
●选择你需要的方法
3
2
2查书/google->写代码测试->查看源代码->请教别人当我们遇到问题的时候该如何解决?这时候不要急着问别人,太简单的问题,没经过思考的问题,别人会因此而瞧不起你
可以先找找书,到google中搜一下看看,绝大部分问题基本就解决了
而像"某些类/方法如何使用的问题",DOC文档就是答案
对某些知识点有疑惑是,写代码测试一下,会给你留下深刻的印象
而有的问题,你可能需要直接看API的源代码验证你的想法
万不得已才去请教别人
3
2
3学习开源软件的设计思想Java领域有许多源代码开放的工具、组件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive论坛、PetStore宠物店等等多如牛毛
这些可是前辈给我们留下的瑰宝呀
入宝山而空手归,你心甘吗?对这些工具、框架进行分析,领会其中的设计思想,有朝一日说不定你也能写一个XXX框架什么的,风光一把
分析开源软件其实是你提高技术、提高实战能力的便捷方法
3
2
4规范的重要性没有规矩,不成方圆
这里的规范有两层含义
第一层含义是技术规范,多到/docs/codeconv/,中文的也有,啊,还要问我在哪,请参考3
2
2节
3
2
5不局限于Java很不幸,很幸运,要学习的东西还有很多
不幸的是因为要学的东西太多且多变,没时间陪老婆家人或女朋友,导致身心疲惫,严重者甚至导致抑郁症
幸运的是别人要抢你饭碗绝非易事,他们或她们需要付出很多才能达成心愿
Java不要孤立地去学习,需要综合学习数据结构、OOP、软件工程、UML、网络编程、数据库技术等知识,用横向纵向的比较联想的方式去学习会更有效
如学习Java集合的时候找数据结构的书看看;学JDBC的时候复习数据库技术;采取的依然是"需要的时候再学"的原则
4.结束语需要强调的是,学习软件开发确实有一定的难度,也很辛苦,需要付出很多努力,但千万不要半途而废
本文如果能对一直徘徊在Java神殿之外的朋友有所帮助的话,笔者也欣慰了
哈哈,怎么听起来老气横秋呀?没办法,在电脑的长期辐射之下,都快变成小老头了
最后奉劝各位程序员尤其是MM程序员,完成工作后赶快远离电脑,据《胡播乱报》报道,电脑辐射会在白皙的皮肤上面点缀一些小黑点,看起来鲜艳无比(转载文章请保留出处:Java家())请问要掌握JAVA的输入输出,该怎么学,学些什么
以上就是关于springboot整合多数据源全部的内容,包括:springboot整合多数据源、jdk1.8下maven3.3.3报错版本不对.除了用jdk1.6,还有什么办法吗、如何在spring框架中解决多数据源的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)