JAVA WEB入門からday 26に精通するまで基礎強化
11372 ワード
はんしゃはんぷくじょうほう
はんしゃ注記
反射汎型と反射注釈の応用例
ダイナミックエージェント
例:
Waiterケース
クラスローダ
Nginx
webはここまで学んで基本的に终わって、多くのものは実は学びながら忘れて、绝えず学んで、练习に行きます.多くのノートもざらざらしていて、自分は大丈夫で、他の人が見ても何を言っているのか分からないと思います.だから、この点を強化しなければなりません.次はフレーム部分で、皆さんと一緒に勉強します.これは最高の時代であり、最悪の時代でもある.しかし、私たちの時代に属しています.
public class Demo1 {
public static void main(String[] args) {
new B(); // java.lang.String
new C(); // java.lang.Integer
}
}
class A<T>{
public A(){
// , class
Class clazz=this.getClass();
Type type=clazz.getGenericSuperclass(); //
ParameterizedType ptype=(ParameterizedType) type;// A<T>
Type[] types=ptype.getActualTypeArguments(); // <> ,
Class c=(Class) types[0];
System.out.println(c.getName());
}
}
class B extends A<String>{
}
class C extends A<Integer>{
}
はんしゃ注記
- , Class
- , Method
- , Construcator
- , Field
public class Demo2 {
public static void main(String[] args) throws NoSuchMethodException, SecurityException {
//
Class clazz=Test.class;
// ,
//
/* MyAnno myanno=(MyAnno) clazz.getAnnotation(MyAnno.class);
// 18
System.out.println(myanno.name()+":"+myanno.age()); */
// ,
Method method=clazz.getMethod("fun");
//
MyAnno myanno=(MyAnno) method.getAnnotation(MyAnno.class);
// ,36
System.out.println(myanno.name()+":"+myanno.age());
}
}
@MyAnno(name=" ",age=18)
class Test{
@MyAnno(name=" ",age=36)
public void fun(){
}
}
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnno{
String name();
int age();
}
反射汎型と反射注釈の応用例
public class Test {
private QueryRunner qr=new QueryRunner(JdbcUtils.getDataSource());
public void addUser(User user) throws SQLException{
String sql="";
Object []params={};
qr.update(sql, params);
}
public void addCategory(Category category) throws SQLException{
String sql="";
Object []params={};
qr.update(sql, params);
}
}
, Basedao
,
class BaseDao<T>{
public void add(T bean){
}
public void update(T bean){
}
}
,
class UserDao extends BaseDao<User>{
public void addUser(User user){
super.add(user);
}
}
,
class BaseDao<T>{
private Class<T> beanclass;
BaseDao(){
//
Class clazz=this.getClass();
Type type=clazz.getGenericSuperclass(); //
ParameterizedType ptype=(ParameterizedType) type;// A<T>
Type[] types=ptype.getActualTypeArguments(); // <> ,
beanclass=(Class) types[0];
}
public void add(T bean) throws SQLException{
// , javabean
Field []fs=beanclass.getDeclaredFields();
// , 。 ? ?
String sql="insert into "+beanclass.getSimpleName()+" values(";
for(int i=0;i<fs.length;i++){
sql+="?";
if(i<fs.length-1){
sql+=",";
}
}
sql+=")";
//
Object []params={};
qr.update(sql, params);
}
public void update(T bean){
}
}
ダイナミックエージェント
: , 。
interface A{
}
interface B{
}
, ,
Object o= (new Class[]{A.class,B.class})
-----------------------------------------------------------------------
Object proxyObject=Proxy.newProxyInstance(ClassLoader classloader,Class[] interface,InvocationHandler h)
: , 。
:ClassLoader: , .class jvm 。 。
Class[] interface: ,
InvocationHandler:
例:
public class Demo3 {
public static void main(String[] args) {
Demo3 d=new Demo3();
ClassLoader classloader=d.getClass().getClassLoader();
// invoke
InvocationHandler h=new InvocationHandler() {
public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable {
System.out.println(" ");
return null;
}
};
//
Object o=Proxy.newProxyInstance(classloader, new Class[]{ATest.class, BTest.class},h);
ATest a=(ATest) o;
BTest b=(BTest) o;
o.toString();
a.a();
b.b();
}
}
interface ATest{
public void a();
}
interface BTest{
public void b();
}
hello
hello
hello
InvocationHandler , , InvocationHandler invoke
InvocationHandler h=new InvocationHandler() {
public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable {
System.out.println(" ");
return null;
}
};
invoke o, a() ,
Waiterケース
Waiter
public interface Waiter {
public void serve();
}
,
public class ManWaiter implements Waiter {
public void serve() {
System.out.println(" ");
}
}
public class Demo4 {
public static void main(String[] args) {
Demo4 d=new Demo4();
ClassLoader classloader=d.getClass().getClassLoader();
ManWaiter waiter=new ManWaiter();
InvocationHandler h=new WaiterInvocationHandler(waiter);
Waiter proxywaiter=(Waiter) Proxy.newProxyInstance(classloader, new Class[]{Waiter.class}, h);
//
proxywaiter.serve();
}
}
Waiter , invoke , invoke
class WaiterInvocationHandler implements InvocationHandler{
private Waiter waiter;
public WaiterInvocationHandler(Waiter waiter){
this.waiter=waiter;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println(" ,01 ");
waiter.serve();
return null;
}
}
Waiter
:
クラスローダ
: .class 。
:
: java (jre/lib/rt.jar )
: java (jre/lib/ext/*.jar)
: jar , .class (classpath )
:
A new A()
A ,
A
, A
jar A , , , A ,
, null, A
,
null, A,
ClassNotFoundException
。 String ,String ,
String, ,
Nginx
Nginx ("engine x") HTTP 。
" " , , , IP 。
, , 。
: , , ,
。
: , , , , , 。 。 。
: 10086,10086 , 10086 。 。 , 。
1) ,
2)
3)
webはここまで学んで基本的に终わって、多くのものは実は学びながら忘れて、绝えず学んで、练习に行きます.多くのノートもざらざらしていて、自分は大丈夫で、他の人が見ても何を言っているのか分からないと思います.だから、この点を強化しなければなりません.次はフレーム部分で、皆さんと一緒に勉強します.これは最高の時代であり、最悪の時代でもある.しかし、私たちの時代に属しています.