java 通过jdbc如何获取表名的注释,注意,不是字段的注释

java 通过jdbc如何获取表名的注释,注意,不是字段的注释,第1张

取字段注释 这样写就OK

Select COLUMN_NAME 列名, DATA_TYPE 字段类型, COLUMN_COMMENT 字段注释

from INFORMATION_SCHEMACOLUMNS

Where table_name = 'companies'##表名

AND table_schema = 'testhuicard'##数据库名

AND column_name LIKE 'c_name'##字段名

取表注释这样写

Select table_name 表名,TABLE_COMMENT 表注释 from INFORMATION_SCHEMATABLES Where table_schema = 'testhuicard' ##数据库名

AND table_name LIKE 'companies'##表名

我想应该很清晰了吧,我写的都是SQL语句 你通过JDBC自己一调就全调出来了!有疑问就问出来哈

Spring如何使用注解机制完成自动装配

Java实例构造时会调用默认父类无参构造方法,Spring正是利用了这一点,让" *** 作元素的代码"得以执行。

两种处理策略

(1)类级别的注解:如@Component、@Repository、@Controller、@Service以及JavaEE6的@ManagedBean和@Named注解,都是添加在类上面的类级别注解。

Spring容器根据注解的过滤规则扫描读取注解Bean定义类,并将其注册到Spring IoC容器中。

(2)类内部的注解:如@Autowire、@Value、@Resource以及EJB和WebService相关的注解等,都是添加在类内部的字段或者方法上的类内部注解。

SpringIoC容器通过Bean后置注解处理器解析Bean内部的注解。

Spring实现@Autowire解析和注入的核心的类是通过AutowiredAnnotationBeanPostProcessor来实现的。

我们可以通过其方法列表看出,其中对字段的注入,对属性的注入,还有选择相应的构造方法来注入。

1,从构造方法的缓存中查询其构造方法

2,若缓存中不存在,则根据反射获取所有构造方法

3,遍历所有构造方法,查询器是否含有@Autowired属性

4,判断Autowired注解中指定了required属性 (required属性就是判断是否强依依赖)若存在required就使用默认构造方法。

5,返回指定的构造方法

注入的时候则是通过inject方法来实现。

================================================================================================================================

Spring对注解的支持主要都是通过反射来获取相应的注解,来做相应的处理,我们的工程中大部分都是使用@Service 和@Autowired来使用,其实我们还可以使用到其他的注解来加快我们的开发,满足我们的多样性需求。

annotation是挺简单的东西其实就是个声明。然后通过反射去取那些声明了值。

autowire其实也是这个意思。通过反射去看你autowire的方式,通过定义的方式,去给你声明的变量赋值。

通过java的反射机制相关的API来访问Annotation信息。

相关类(框架或工具中的类)根据这些信息来决定如何使用该程序元素或改变它们的行为。

Java语言解释器在工作时会忽略这些Annotation,因此在JVM中这些Annotation是“不起作用”的,只能通过配套的工具才能对这些Annotation类型的信息进行访问和处理。

注解本身不做任何事情,只是像xml文件一样起到配置作用。

注解代表的是某种业务意义,注解背后处理器的工作原理如上源码实现:

——首先解析所有属性,判断属性上是否存在指定注解。

——如果存在则根据搜索规则取得bean,然后利用反射原理注入。

——如果标注在字段上面,也可以通过字段的反射技术取得注解,根据搜索规则取得bean,然后利用反射技术注入。

================================================================================================================================

Spring 30 新增了另外两个实现类:AnnotationConfigApplicationContext 和 AnnotationConfigWebApplicationContext。从名字便可以看出,它们是为注解而生,直接依赖于注解作为容器配置信息来源的 IoC 容器初始化类。由于 AnnotationConfigWebApplicationContext 是 AnnotationConfigApplicationContext 的 web 版本,其用法与后者相比几乎没有什么差别,因此本文将以 AnnotationConfigApplicationContext 为例进行讲解。

我们需要在用于指定配置信息的类上加上 @Configuration 注解,以明确指出该类是 Bean 配置的信息源。并且 Spring 对标注 Configuration 的类有如下要求:

配置类不能是 final 的;

配置类不能是本地化的,亦即不能将配置类定义在其他类的方法内部;

配置类必须有一个无参构造函数。

AnnotationConfigApplicationContext 将配置类中标注了 @Bean 的方法的返回值识别为 Spring Bean,并注册到容器中,受 IoC 容器管理。@Bean 的作用等价于 XML 配置中的 <bean/> 标签。

在一般的项目中,为了结构清晰,通常会根据软件的模块或者结构定义多个 XML 配置文件,然后再定义一个入口的配置文件,该文件使用 <import/> 将其他的配置文件组织起来。最后只需将该文件传给 ClassPathXmlApplicationContext 的构造函数即可。

针对基于注解的配置,Spring 也提供了类似的功能,只需定义一个入口配置类,并在该类上使用 @Import 注解引入其他的配置类即可,最后只需要将该入口类传递给 AnnotationConfigApplicationContext。

@Configuration

@Import({BookStoreServiceConfigclass,BookStoreDaoConfigclass})

public class BookStoreConfig{ … }

================================================================================================================================

>

对于局部变量的注解只能在源码级别上进行处理,类文件并不描述局部变量。因此,所有的局部变量注解在编译完一个类的时候就会被遗弃掉。同样地,对包的注解不能在源码级别之外存在。

在文件package-infojava中注解一个包,该文件只包含以注解先导的包声明

包注解需要在特定文件:package-infojava,中添加,获取如下:

Package pkg = TestAnnotationclassgetPackage();

boolean hasAnnotation=pkgisAnnotationPresent(Xpcclass);

if (hasAnnotation){

    Xpc xpc=pkggetAnnotation(Xpcclass);

    Systemoutprintln("package:" + pkggetName());

    Systemoutprintln("id=" + xpcid());

    Systemoutprintln("name=" + xpcname());

    Systemoutprintln("gid=" + xpcgid());

}

1、根据图示代码这里创建一个Car的一个类,这个类中定义了四个属性,重写了toString方法。

2、然后在配置文件中按照下图中代码写,下图中代码是属性注入的方式,即通过property标签来注入,name表示类中的属性名称,value表示属性的值,这里可以看到报错,这里如果要使用属性注入的方式,必须先在类中有属性的set方法。

3、打开Car类,设置所有属性的set方法。

4、可以看到配置文件中不报错了。

5、在主程序中创建IOC容器,根据id获取bean实例,调用创建car实例的toString方法。

6、下图就是程序的运行结果,可以看到按照name注入成功。

顾名思义,@AliasFor表示别名,它可以添加到自定义注解的两个属性上,表示这两个属性互为别名。也就是说,这两个属性其实是同一个含义。

通常所有注解都会有一个属性value,在使用注解时,如果给value进行赋值,默认可以将value省略,如: @RequestMapping(value="name") 就可以写成 @RequestMapping("name") 。

若自定义注解已有一个属性,但是我们想要定义一个能够 描述业务的属性 ,就可以使用@AliasFor与之前已有的属性互为别名。如下代码,name和value就互为别名。

自定义注解@MyComponent继承了注解@Component( 继承了哪个注解,就需要在自定义注解上引入该注解 ),name属性与@Component中的value属性互为别名。

因为我们的自定义注解继承了@Component注解,按理说@MyComponent的作用应该和@Component作用一样,但是 此处有一点特殊 。如果我们的自定义注解中没有采用 value 这个属性,而是定义为其它名称,例如name。spring在初始化扫描bean时并不会像使用@Component注解一样,读取注解中自定义的beanName。示例如下,spring加载UserServiceImpl后生成的beanName并不是“userService”,而是“userServiceImpl”。

查看spring源码,发现spring在生成bean对应的beanName时,会先从注解@Component里获取value对应的名称(@Controller等注解本质上也是@Component,具体解释可以参考本文)。所以在自定义注解中如果将value替换为其它属性name,就无法采用自定义的beanName,只能生成默认的别名也就是类名。因此, 在自定义注解时,最好采用默认的value 。

建议自定义注解将name()修改为value():

orgspringframeworkcontextannotationAnnotationBeanNameGenerator#isStereotypeWithNameValue

以上就是关于java 通过jdbc如何获取表名的注释,注意,不是字段的注释全部的内容,包括:java 通过jdbc如何获取表名的注释,注意,不是字段的注释、spring注解怎么实现的、java元注解,局部注解怎么解析等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9480901.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存