Yes, the TAs are compiled, copied to the file system and loaded on run time, but please go through the tutorials first. Things will be clearer after that. It also depends a bit on how you want to set it up.
Basically, /system/bin/xtest (the client app) on the normal world side triggers the TAs (/system/lib/optee_armtz/*.ta) via a complex chain and layers of software components which you don’t have to worry about for what you’re trying to achieve right now, but the point is that you cannot interface to the TAs directly from an Android app since they’re running in secure world. You can only interface to them via xtest, or another client app you write if you don’t want to use xtest.
xtest is currently a C program. To interface to it, you will have to convert it to a shared library using the instructions on http://www.ntu.edu.sg/home/ehchua/programming/android/android_ndk.html as a reference. Your Android app (java program) can then call any native method that you expose via your xtest shared library.
If you don’t want to mess with NDK/JNI, an alternative I can think of is that you can maybe write a regular Android app that uses sockets (https://developer.android.com/reference/java/net/Socket.html) to communicate with xtest (as a C program), but this will also require you adding the proper C sockets interface (ref: http://www.linuxhowtos.org/C_C++/socket.htm) to xtest to ‘talk’ back to the Android app.
You can use another type of IPC instead of sockets (https://en.wikipedia.org/wiki/Inter-process_communication), if there’s one you prefer or are more comfortable with.